如何查询同时在两个指定部门任职的员工 现有SQL执行失败原因排查
你的SQL存在的问题
- 字段引用错误:
department表的部门名字段为department_name,你写的dname不存在,会直接触发语法错误无法运行。 - 条件逻辑矛盾:
WHERE子句中同时要求department_name = 'software'和department_name = 'hardware',单条记录的字段不可能同时等于两个不同的值,即便修正字段名,查询结果也会是空集。 - 业务逻辑不匹配:当前的三表连接方式只能匹配员工关联单个部门的记录,根本无法实现“同时属于两个不同部门”的判断需求。
正确的查询写法
方法1:分组聚合统计(推荐)
逻辑是先筛选目标部门的任职记录,按员工分组后统计关联的不同部门数量,数量为2即符合要求:
SELECT e.employee_name FROM employee e INNER JOIN working w ON e.employee_id = w.eid INNER JOIN department d ON w.did = d.department_id WHERE d.department_name IN ('software', 'hardware') GROUP BY e.employee_id, e.employee_name HAVING COUNT(DISTINCT d.department_name) = 2;
方法2:两次关联部门表
分别匹配员工在两个部门的任职记录,同时匹配成功即为符合要求:
SELECT DISTINCT e.employee_name FROM employee e INNER JOIN working w1 ON e.employee_id = w1.eid INNER JOIN department d1 ON w1.did = d1.department_id AND d1.department_name = 'software' INNER JOIN working w2 ON e.employee_id = w2.eid INNER JOIN department d2 ON w2.did = d2.department_id AND d2.department_name = 'hardware';
内容的提问来源于stack exchange,提问作者Ammar
相关产品推荐
相关产品推荐

