Sql-Server
排他性左連接
我正在嘗試將 2 個不同的表(Table99 和 Table2)加入 Table1。第一個是直接的 RIGHT JOIN。第二個是 LEFT JOIN,我試圖將 Table1 和 Left Join 帶到 Table2,並從 Table1 中帶回 Table2 中不存在的結果
例子:
FROM Table1 tbl1 RIGHT JOIN Table99 tbl99 ON tbl1.CARD_ID = tbl99.CARD_ID AND tbl1.DATE_OPEN = tbl99.DATE_OPEN LEFT JOIN Table2 tbl2 ON tbl1.ACCOUNT_NUMBER = tbl2.ACCOUNT_NUMBER AND tbl1.APPL_ID = tbl2.APPL_ID' WHERE tbl1.ACCOUNT_NUMBER <> tbl2.ACCOUNT_NUMBER
Left Join 子句是我試圖從 tble1 中提取 tbl2 中不存在的所有結果的地方
從表 1 中帶回表 2 中不存在的結果
您可以使用不存在
SELECT T1.* FROM TABLE1 T1 WHERE NOT EXISTS(SELECT 1 FROM TABLE2 T2 WHERE T2.ACCOUNT_NUMBER = T1.ACCOUNT_NUMBER AND T2.APPL_ID = T1.APPL_ID );
更新
無論您在左反半連接之前使用了多少 JOIN ,它都會返回左側不存在於右側的所有行,根據謂詞:
WHERE T2.ACCOUNT_NUMBER = T1.ACCOUNT_NUMBER AND T2.APPL_ID = T1.APPL_ID
SELECT T1.* FROM TABLE1 T1 RIGHT JOIN TABLE99 T99 ON T99.CARD_ID = T99.CARD_ID AND T99.DATE_OPEN = T1.DATE_OPEN WHERE NOT EXISTS(SELECT 1 FROM TABLE2 T2 WHERE T2.ACCOUNT_NUMBER = T1.ACCOUNT_NUMBER AND T2.APPL_ID = T1.APPL_ID );
讓我們想像 3 個具有下一個 ID 的表:
T1 T2 T9 ---- ---- ---- 01 01 01 02 02 03 03 04 04 04 05 05
給我所有存在於 T1 和 T9 中的 ID。
SELECT ID FROM T1 JOIN T9 ON T1.ID = T2.ID; 01,02,04,05
現在,給我這個組在 T2 中不存在的所有 ID:
虛擬碼:
SELECT ID FROM (01,02,04,05) WHERE NOT EXISTS IN (01,03,04); 02,05
注意:我已經用它們的值替換了表名,以使最終結果更清晰