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

如何在同一结果集中过滤同ID下Column2值存在于Column3的记录?

解决方案:按ID过滤Column2不在同ID Column3中的记录

原查询结果集

IDColumn 2Column 3
12300$80$70
12300$70$80
12300$70$80
12313$10$100
12313$50$70
12510$50$70
12510$70$50
12510$10$120

过滤需求

剔除同一ID下,Column 2的值在该ID对应的Column 3中存在的记录,具体规则:

  • ID 12300:$80、$70都能在同ID的Column3中找到,全部移除
  • ID 12313:两条记录的Column2值都不在同ID的Column3中,全部保留
  • ID 12510:仅$10不在同ID的Column3中,仅保留该条

期望结果集

IDColumn 2Column 3
12313$10$100
12313$50$70
12510$10$120

具体实现方案

方法1:使用NOT EXISTS子查询(推荐)

把你的复杂原查询封装成CTE临时表,再通过NOT EXISTS筛选符合要求的记录:

WITH original_data AS (
    -- 替换成你的原多表关联查询语句
    SELECT ID, Column2, Column3
    FROM your_complex_join_query
)
SELECT od.ID, od.Column2, od.Column3
FROM original_data od
WHERE NOT EXISTS (
    SELECT 1
    FROM original_data od_inner
    WHERE od_inner.ID = od.ID
      AND od_inner.Column3 = od.Column2
);

方法2:使用LEFT JOIN + 空值判断

这是等价的写法,通过左连接后筛选匹配不到的记录:

WITH original_data AS (
    -- 替换成你的原多表关联查询语句
    SELECT ID, Column2, Column3
    FROM your_complex_join_query
)
SELECT od.ID, od.Column2, od.Column3
FROM original_data od
LEFT JOIN original_data od_inner
    ON od.ID = od_inner.ID
    AND od.Column2 = od_inner.Column3
WHERE od_inner.ID IS NULL;

兼容老版本数据库的写法

如果你的数据库不支持CTE(比如老版本MySQL),可以用子查询替代:

SELECT od.ID, od.Column2, od.Column3
FROM (
    -- 替换成你的原多表关联查询语句
    SELECT ID, Column2, Column3
    FROM your_complex_join_query
) od
WHERE NOT EXISTS (
    SELECT 1
    FROM (
        -- 替换成你的原多表关联查询语句
        SELECT ID, Column2, Column3
        FROM your_complex_join_query
    ) od_inner
    WHERE od_inner.ID = od.ID
      AND od_inner.Column3 = od.Column2
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:38:17