如何调整SQL查询,让无员工的部门也纳入查询结果?
解决方案
你的原查询只筛选出了有员工且员工都不住马德里的部门,漏掉了无员工的部门。要同时包含这两类部门,核心是判断「部门中不存在居住在MADRID的员工」,可以用以下两种常见写法:
方法一:使用NOT EXISTS(推荐,性能更优)
通过子查询检查当前部门是否存在住在马德里的员工,若不存在则保留该部门(包括无员工的部门):
SELECT d.NUM_DPT, d.NOM_DPT FROM departaments d WHERE NOT EXISTS ( SELECT 1 FROM empleats e WHERE e.NUM_DPT = d.NUM_DPT AND e.ciutat_empl = 'MADRID' ) ORDER BY d.NOM_DPT ASC;
方法二:分组统计过滤
通过左连接关联部门和员工,分组后统计部门内住在马德里的员工数量,数量为0的部门即为符合条件的:
SELECT d.NUM_DPT, d.NOM_DPT FROM departaments d LEFT JOIN empleats e ON d.NUM_DPT = e.NUM_DPT GROUP BY d.NUM_DPT, d.NOM_DPT HAVING COUNT(CASE WHEN e.ciutat_empl = 'MADRID' THEN 1 END) = 0 ORDER BY d.NOM_DPT ASC;
说明
- 两种写法都能覆盖「无员工的部门」和「有员工但无马德里居民的部门」这两种场景
- NOT EXISTS通常在数据库中会有更好的执行效率,因为一旦找到匹配的记录就会停止查询
内容的提问来源于stack exchange,提问作者Norhther
相关产品推荐
相关产品推荐

