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

SQL查询:如何筛选符合指定列值规则的所有目标行

SQL正确筛选语句方案

你原有写法的问题是仅做了行级规则校验,没有实现同ID全量校验的要求:只要同一个ID下存在任意一行Col1 = Col2,该ID下的所有行都需要被剔除,不能仅单独判断某一行是否符合规则。

方案1:NOT EXISTS 实现(全数据库兼容)

该写法兼容MySQL、PostgreSQL、SQL Server等所有主流SQL dialect:

SELECT t1.*
FROM 你的表名 t1
WHERE NOT EXISTS (
    SELECT 1 
    FROM 你的表名 t2 
    WHERE t2.ID = t1.ID 
      AND t2.Col1 = t2.Col2
)

逻辑说明:子查询会校验当前ID是否存在Col1=Col2的记录,只要存在就直接剔除该ID下的所有行,Null值比较时Col1=Null不会判定为成立,符合需求。

方案2:窗口函数实现(支持MySQL8.0+等新数据库)

如果你的数据库支持窗口函数,可以用CTE+统计窗口的写法:

WITH id_match_stat AS (
    SELECT 
        *,
        SUM(CASE WHEN Col1 = Col2 THEN 1 ELSE 0 END) OVER (PARTITION BY ID) AS equal_count
    FROM 你的表名
)
SELECT ID, Col1, Col2 
FROM id_match_stat 
WHERE equal_count = 0

逻辑说明:先按ID分组统计每个ID下Col1=Col2的记录行数,仅保留行数为0的ID对应的所有行。

执行结果验证

两种写法执行后得到的结果都符合你的预期:

IDCol1Col2
6461Null
122381
122382
122383

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:54:04