2011-10-14 12 views
1

我加入兩個表,我想然後加入第三,但我想獲得不加入記錄的結果。不知道用什麼來做到這一點。我可以搜索出現在連接之外的空值嗎?如何讓所有結果不在一個集合中?

+3

請提供與預期的輸出採樣數據的所有3代表的模式。總的來說,我認爲你正在尋找'EXISTS'。 – shahkalpesh

+1

http://explainextended.com/2009/09/15/not-in-vs-not-exists-vs-left-join-is-null-sql-server/ –

+0

+1 @OMGPonies - 這是我的goto資源這個問題出現了很多。 – JNK

回答

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) 
+0

不知道爲什麼我的問題被關閉,因爲這是我要找的答案,謝謝! – Exitos

相關問題