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

如何查询存在Date_closed但无Case_code 001的Case_Id?

解决你的Case_Id筛选问题

针对你提出的需求——找出所有在Table Two中Date_closed非空,但在Table One中未关联Case_code 001的Case_Id,这里有几种清晰高效的SQL解决方案:

方法一:使用NOT EXISTS(推荐,逻辑直观)

这种写法直接对应需求的逻辑:先找到已关闭的Case,再排除那些存在001编码的Case。

SELECT DISTINCT t2.Case_Id
FROM Table_Two t2
WHERE t2.Date_closed IS NOT NULL
  AND NOT EXISTS (
    SELECT 1
    FROM Table_One t1
    WHERE t1.Case_Id = t2.Case_Id
      AND t1.Case_code = '001'
  );

代码解释:

  • DISTINCT:确保结果里没有重复的Case_Id(如果Table Two中同一个Case_Id有多条记录的话)
  • t2.Date_closed IS NOT NULL:先筛选出已经完成关闭的Case
  • NOT EXISTS子查询:检查当前Case_Id在Table One中是否存在Case_code='001'的记录,不存在则保留该Case_Id

方法二:使用LEFT JOIN + IS NULL

这是另一种常用的筛选“不存在关联记录”的写法,适合习惯用JOIN逻辑的开发者:

SELECT DISTINCT t2.Case_Id
FROM Table_Two t2
LEFT JOIN Table_One t1
  ON t2.Case_Id = t1.Case_Id
  AND t1.Case_code = '001'
WHERE t2.Date_closed IS NOT NULL
  AND t1.Case_Id IS NULL;

代码解释:

  • 我们只把Table Two和Table One中Case_code='001'的记录做关联
  • 如果某个Case_Id在Table One里没有001编码的记录,那么LEFT JOIN后t1.Case_Id会是NULL
  • 结合Date_closed IS NOT NULL的条件,就能得到目标结果

方法三:使用GROUP BY + HAVING

如果需要统计每个Case的编码情况,这种分组统计的方法也能实现需求:

SELECT t1.Case_Id
FROM Table_One t1
JOIN Table_Two t2 ON t1.Case_Id = t2.Case_Id
WHERE t2.Date_closed IS NOT NULL
GROUP BY t1.Case_Id
HAVING SUM(CASE WHEN t1.Case_code = '001' THEN 1 ELSE 0 END) = 0;

代码解释:

  • 先关联两个表,过滤出已关闭的Case记录
  • 按Case_Id分组,统计每个分组里Case_code='001'的数量
  • HAVING子句要求这个数量为0,也就是该Case没有001编码的关联记录

小提示:

  • 优先选择NOT EXISTS或LEFT JOIN的写法,大部分数据库的查询优化器会对这两种写法做很好的性能优化,执行效率更高
  • 如果Table Two中每个Case_Id只有一条记录,DISTINCT可以省略,但加上更稳妥,避免意外的重复结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:14:25