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

如何排除CTE中满足特定SupervisorID与UserID条件的记录?

解决你的CTE过滤问题

首先,先把你提供的CTE数据整理成更清晰的格式:

IDNameUserIDSupervisorID
1Mark12
2John11
3Julia31
4Tomm12
5Eric22

你的需求很明确:只要SupervisorID是1或者2,就排除所有UserID等于1的行,其他行都保留。

最直观的解决方案

其实不需要用CASE语句,直接用逻辑组合的WHERE条件就能轻松实现:

SELECT * 
FROM CTE 
WHERE NOT (SupervisorID IN (1, 2) AND UserID = 1);

这个语句的逻辑是:排除所有同时满足「SupervisorID是1或2」且「UserID等于1」的行,剩下的所有行都会被返回。

用CASE语句完成你的尝试

如果你坚持想用CASE来实现,也可以调整逻辑补全你的代码:

SELECT * 
FROM CTE 
WHERE UserID <> CASE 
                  WHEN SupervisorID IN (1, 2) THEN 1 
                  ELSE NULL  -- 当SupervisorID不是1/2时,返回NULL,UserID和NULL比较结果为UNKNOWN,不会排除该行
                END;

不过这种写法不如第一种直观,推荐优先使用第一种逻辑清晰的写法。

验证结果

执行上述查询后,会返回以下两行数据:

IDNameUserIDSupervisorID
3Julia31
5Eric22

完全符合你的需求:排除了SupervisorID为1/2且UserID为1的行,保留了其他所有行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:15:48