如何获得不在一组中的所有结果?

时间:2011-10-14 13:36:00

标签: sql-server tsql

我加入两个表,然后我想加入第三个,但我想得到不加入的记录的结果。真的不知道该怎么做才能做到这一点。我可以搜索出现在联接之外的空值吗?

1 个答案:

答案 0 :(得分:1)

执行此操作的最佳方式通常是使用NOT INNOT 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)