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

SQL中按同ID的TYPE条件排除特定行的实现需求

实现特定规则的SQL结果过滤

原始数据

IDTYPE
110
120
130
140
210
220
240

需求

仅当同一ID下不存在TYPE=30的行时,才排除TYPE=40的行:

  • ID=1同时存在TYPE=30和TYPE=40,保留所有行
  • ID=2没有TYPE=30,移除其TYPE=40的行

期望结果

IDTYPE
110
120
130
140
210
220

子查询过滤方案

假设原始查询的结果集名为original_data,可以用以下SQL语句实现过滤:

写法一:使用EXISTS子查询

SELECT od.ID, od.TYPE
FROM original_data od
WHERE NOT (
    od.TYPE = 40 
    AND NOT EXISTS (
        SELECT 1 
        FROM original_data od_sub 
        WHERE od_sub.ID = od.ID 
        AND od_sub.TYPE = 30
    )
);

写法二:先统计ID的TYPE标记再关联

SELECT od.ID, od.TYPE
FROM original_data od
JOIN (
    SELECT 
        ID, 
        MAX(CASE WHEN TYPE = 30 THEN 1 ELSE 0 END) AS has_type_30
    FROM original_data
    GROUP BY ID
) id_status ON od.ID = id_status.ID
WHERE NOT (od.TYPE = 40 AND id_status.has_type_30 = 0);

逻辑说明

两种写法核心逻辑一致:

  • 当某行是TYPE=40,且对应的ID下没有TYPE=30的记录时,排除该行
  • 其他所有情况(非TYPE=40的行,或TYPE=40但对应ID存在TYPE=30的行)全部保留

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 16:16:02