SQL技术咨询:如何查询不属于X部门的唯一员工?
查询无任何X部门记录的唯一员工列表
需求明确:需要找出从未隶属于X部门的员工,员工的部门值可以是null、Y或Z,最终返回唯一的员工ID列表。
表结构与测试数据
创建表的SQL:
create table employe ( empID varchar(10), department varchar(10) );
插入测试数据:
insert into employe values('A101'),('A101','X'),('A101','Y'),('A102','Z'),('A102','X'), ('A103','Z'),('A103','Y'),('A104','X'),('A104','Y'),('A105','Z'),('A106','X');
解决方案
方法1:使用NOT EXISTS(逻辑直观,推荐)
SELECT DISTINCT empID FROM employe e WHERE NOT EXISTS ( SELECT 1 FROM employe WHERE empID = e.empID AND department = 'X' );
逻辑说明:对每个员工,检查是否存在其属于X部门的记录。如果不存在,则保留该员工ID,DISTINCT确保每个ID只返回一次。
方法2:使用GROUP BY + HAVING
SELECT empID FROM employe GROUP BY empID HAVING SUM(CASE WHEN department = 'X' THEN 1 ELSE 0 END) = 0;
逻辑说明:按员工ID分组,统计每个员工属于X部门的记录数量。如果统计结果为0,说明该员工没有任何X部门的记录,符合需求。
预期结果
empID ------ A103 A105
内容的提问来源于stack exchange,提问作者Monika
相关产品推荐
相关产品推荐

