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

如何编写SQL查询排除含失败或待处理状态的ID?

编写SQL查询排除含特定状态的ID

你的初始查询存在逻辑问题:它仅筛选单条记录状态为S且不是F/P的行,但无法排除那些同一ID下存在F或P状态记录的情况——比如某个ID同时有S和F的记录,初始查询会把S的行查出来,但按照需求这个ID应该被完全排除。

要实现需求(仅保留所有关联记录中无F、无P,且至少有S状态的ID),可以用以下两种方法:

方法一:使用NOT EXISTS子查询

通过子查询检查当前ID下是否存在F或P的记录,仅保留无此类记录且自身为S的ID:

SELECT DISTINCT a.ID
FROM TABLE a
WHERE a.Content = 'Submit'
  AND a.Status = 'S'
  AND NOT EXISTS (
    SELECT 1
    FROM TABLE b
    WHERE b.ID = a.ID
      AND b.Content = 'Submit'
      AND b.Status IN ('F', 'P')
  );

添加DISTINCT是为了避免同一ID有多条S记录时重复输出。

方法二:使用分组+HAVING子句

按ID分组后,通过聚合函数判断该ID下是否存在F/P,同时确保至少有S状态:

SELECT ID
FROM TABLE
WHERE Content = 'Submit'
GROUP BY ID
HAVING SUM(CASE WHEN Status IN ('F', 'P') THEN 1 ELSE 0 END) = 0
   AND SUM(CASE WHEN Status = 'S' THEN 1 ELSE 0 END) > 0;
  • 第一个SUM统计F/P的记录数,等于0表示该ID下无此类状态;
  • 第二个SUM确保该ID至少有一条S状态的记录,避免筛选出无任何有效状态的ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:15:07