我加入两个表,然后我想加入第三个,但我想得到不加入的记录的结果。真的不知道该怎么做才能做到这一点。我可以搜索出现在联接之外的空值吗?
答案 0 :(得分:1)
执行此操作的最佳方式通常是使用NOT IN
或NOT EXISTS
- 它们在SQL Server 2005 +中的幕后完全相同。
它们比LEFT JOIN...IS NULL
更受欢迎,因为它们短路 - 一旦找到匹配条件,就会跳过该记录。 LEFT JOIN
加载整个数据集和关系,然后删除记录。
SELECT a.*
FROM TableA a
<other joins>
WHERE a.ComparisonField NOT IN (SELECT RelationField FROM OtherTable)
或
SELECT a.*
FROM TableA a
<other joins>
WHERE NOT EXISTS(SELECT 1
FROM OtherTable o
WHERE o.Relationfield = a.Comparisonfield)