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

T-SQL查询实现:筛选主表与子表ID匹配但seq不匹配的记录

T-SQL查询问题解决方案

原查询逻辑错误原因

你编写的查询逻辑存在偏差:EXISTS子句的判断规则是只要同id下存在任意一条sub_table的seq与当前main_table的seq不等,就会返回当前记录。这会导致例如A1的seq=1这类本应排除的记录,因为同id下存在sub_table的seq=2满足不等条件而被错误返回。

正确实现方案

下面给出3种常用的可实现需求的写法,均可返回预期结果:

写法1:使用NOT EXISTS(最推荐,性能最优)

SELECT
    a.id, a.seq 
FROM 
    main_table a
WHERE 
    -- 保证当前id在sub_table中存在
    EXISTS (SELECT 1 FROM sub_table b WHERE b.id = a.id)
    -- 保证同id下没有匹配的seq
    AND NOT EXISTS (SELECT 1 FROM sub_table b WHERE b.id = a.id AND b.seq = a.seq)

写法2:使用LEFT JOIN加空值判断

SELECT
    a.id, a.seq
FROM
    main_table a
-- 筛选仅在sub_table中存在的id
INNER JOIN (SELECT DISTINCT id FROM sub_table) c ON a.id = c.id
-- 关联匹配seq
LEFT JOIN sub_table b ON a.id = b.id AND a.seq = b.seq
-- 仅保留没有匹配到seq的记录
WHERE b.id IS NULL

写法3:使用EXCEPT求差集

-- 取sub_table中存在的id对应的所有main_table记录
SELECT id, seq FROM main_table WHERE id IN (SELECT id FROM sub_table)
EXCEPT
-- 排除sub_table中已存在的同id同seq记录
SELECT id, seq FROM sub_table

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:15:04