如何用T-SQL查询Tbl_project表中未在Design ID列存在的Parent ID
找出Tbl_project中未出现在Design ID列的Parent ID
方法1:使用NOT EXISTS子查询
这是高效且直观的写法,直接检查每个Parent ID是否在Design ID列中不存在:
SELECT DISTINCT tp.Parent_id FROM Tbl_project tp WHERE NOT EXISTS ( SELECT 1 FROM Tbl_project tp2 WHERE tp2.Design_ID = tp.Parent_id )
- 加上
DISTINCT是为了返回唯一的Parent ID值,如果需要保留所有包含该Parent ID的原始记录,去掉DISTINCT即可。
方法2:使用LEFT JOIN筛选无匹配记录
通过左连接关联自身表,筛选出未匹配到Design ID的Parent ID:
SELECT DISTINCT tp.Parent_id FROM Tbl_project tp LEFT JOIN Tbl_project tp2 ON tp2.Design_ID = tp.Parent_id WHERE tp2.Design_ID IS NULL
排查子查询失效的常见原因
如果之前的子查询没得到预期结果,可能是以下问题:
- 未使用
DISTINCT,导致结果中出现大量重复值,干扰判断 - 子查询的关联条件写错,比如表别名混淆、字段名拼写错误
- Parent ID或Design ID存在
NULL值:因为NULL与任何值的比较结果都是未知,需要额外排除NULL的Parent ID,修改后的查询如下:
SELECT DISTINCT tp.Parent_id FROM Tbl_project tp WHERE tp.Parent_id IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM Tbl_project tp2 WHERE tp2.Design_ID = tp.Parent_id )
内容的提问来源于stack exchange,提问作者user3262364
相关产品推荐
相关产品推荐

