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

基于条件过滤数据:筛选拥有Rank R1且无Rank C1、C2的员工

筛选拥有R1但从未持有C1/C2的员工

我来帮你搞定这个筛选需求!核心思路是先锁定有R1等级的员工,再剔除掉那些曾经拿过C1或C2的人。下面给你两种常用的SQL实现方式,都能满足需求:

方法一:使用NOT EXISTS子查询

这是逻辑最直观的写法,直接检查员工是否存在C1/C2的记录:

SELECT DISTINCT e.Id, e.ECode, e.Name
FROM employee e
WHERE e.Rank = 'R1'
AND NOT EXISTS (
    SELECT 1
    FROM employee e2
    WHERE e2.ECode = e.ECode
    AND e2.Rank IN ('C1', 'C2')
);

逻辑解释

  • 外层查询先抓取所有带有R1等级的员工记录,用DISTINCT避免同一个员工重复出现;
  • 内层的NOT EXISTS会检查当前员工是否有过C1或C2的等级记录,如果有,就把这个员工排除在外。

方法二:使用LEFT JOIN + IS NULL

这种写法通过自连接来筛选无匹配的记录:

SELECT DISTINCT e.Id, e.ECode, e.Name
FROM employee e
LEFT JOIN employee e2
    ON e.ECode = e2.ECode
    AND e2.Rank IN ('C1', 'C2')
WHERE e.Rank = 'R1'
AND e2.Id IS NULL;

逻辑解释

  • 将员工表和自身做左连接,关联条件是员工编号相同,且关联表的等级是C1或C2;
  • 过滤出主表中等级为R1,且关联表没有匹配记录(e2.Id IS NULL)的员工——这就意味着该员工从未持有过C1或C2等级。

测试结果

根据你提供的数据表,最终符合条件的员工是:

  • Id: 2, ECode: EMP2, Name: BB
  • Id: 13, ECode: EMP4, Name: DD

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:07:43