You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL查询仅包含B、C类型记录的员工ID

找出无A类型记录的员工SQL方案

这是个很常见的SQL需求,我给你几种靠谱的写法,都能准确找出那些只有B、C类型记录,完全没有A类型的员工:

方法1:使用NOT EXISTS子查询(最直观)

这种方式逻辑清晰,直接排除掉存在'A'类型记录的员工:

SELECT DISTINCT e.`Emp id`
FROM your_table e
WHERE NOT EXISTS (
    SELECT 1
    FROM your_table e2
    WHERE e2.`Emp id` = e.`Emp id`
    AND e2.type = 'A'
);

说明:DISTINCT用来去重,因为同一个员工可能有多条B/C类型的记录,确保最终结果里每个员工ID只出现一次。

方法2:使用GROUP BY + HAVING统计

通过分组统计每个员工的'A'类型记录数,筛选出数量为0的员工:

SELECT `Emp id`
FROM your_table
GROUP BY `Emp id`
HAVING SUM(CASE WHEN type = 'A' THEN 1 ELSE 0 END) = 0;

说明:SUM(CASE...)会统计每个员工的'A'类型记录总数,等于0就代表该员工没有任何'A'类型的记录。如果需要确保这些员工至少有B/C记录,可以在HAVING里再加COUNT(*) > 0(不过根据你的示例数据,这个条件可选)。

方法3:使用LEFT JOIN筛选NULL

通过左连接自身表,匹配'A'类型记录,然后筛选未匹配到的员工:

SELECT DISTINCT e.`Emp id`
FROM your_table e
LEFT JOIN your_table e2
    ON e.`Emp id` = e2.`Emp id`
    AND e2.type = 'A'
WHERE e2.`Emp id` IS NULL;

说明:左连接会保留所有左表的员工记录,右表只有匹配到'A'类型的才会有数据,所以e2.Emp id IS NULL就代表该员工没有'A'类型的记录。

以上三种方法都能得到你预期的结果(员工ID 2),你可以根据自己使用的数据库和数据量选择最合适的写法,一般来说NOT EXISTS在多数数据库中性能优化做得不错。

内容的提问来源于stack exchange,提问作者nimish jain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:33:04