我在SQL Server 2008中工作。我有4個表我想加入。我們稱它們爲表A,B,C和D. B,C和D是表A的所有子集。可能有一些在B,C和D之間常見的記錄。我的目標是選擇所有記錄在一個不在B,C或D.所以,我認爲正確的查詢運行是:SQL連接多個表 - 結果集不是預期
SELECT
A.x
FROM A
LEFT JOIN B
ON A.x = B.y
LEFT JOIN C
ON A.x = C.z
LEFT JOIN D
ON A.x = D.i
WHERE
(
(B.y IS NULL)
AND
(C.z IS NULL)
AND
(D.i IS NULL)
)
我遇到的問題是,我知道,有表B中的一些記錄是返回的結果集不應該是。 (對於表C和D也是如此。)因此,我的查詢肯定有問題。我最好的猜測是聯結是模糊的。第一個應該給我A中所有不在B中的記錄。同樣,第二個應該給我A中所有不在C中的記錄。因爲我在WHERE子句中使用了AND,那麼我本質上應該返回只有每個連接共有的記錄。但是,有些事情出錯了。我該如何糾正?
您的查詢必須工作。這種數據(類型,域)中存儲了哪種數據? –