Sql-Server

排他性左連接

  • February 7, 2019

我正在嘗試將 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

注意:我已經用它們的值替換了表名,以使最終結果更清晰

引用自:https://dba.stackexchange.com/questions/229161