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)
不知道爲什麼我的問題被關閉,因爲這是我要找的答案,謝謝! – Exitos
請提供與預期的輸出採樣數據的所有3代表的模式。總的來說,我認爲你正在尋找'EXISTS'。 – shahkalpesh
http://explainextended.com/2009/09/15/not-in-vs-not-exists-vs-left-join-is-null-sql-server/ –
+1 @OMGPonies - 這是我的goto資源這個問題出現了很多。 – JNK