2011-11-21 160 views
0

我有兩個表,我們稱它們爲table1table2。他們都有一個名爲ID1ID2的列,這兩列分別對應兩個表中的PK。SQL Server多對多查詢

我還有另一個表,名爲table3其中包含ID1ID2,建立這兩個表之間的多對多關係。

我需要的是從table2中獲取與table1中的記錄無關的所有記錄。

Ex。

  • 表1包含具有ID的記錄= 1
  • 表2包含兩個記錄ID爲1,2
  • 表3包含一個記錄與值1 - 1

我需要一個查詢,會給我結果2.

任何人都可以建議我一種方式來進行?

感謝

+1

有關於這個主題有關的問題12000已。 – JNK

回答

6
SELECT t2.ID2 
    FROM table2 t2 
    WHERE NOT EXISTS(SELECT NULL 
         FROM table3 t3 
         WHERE t3.ID2 = t2.ID2); 

您也可以使用LEFT JOIN:

SELECT t2.ID2 
    FROM table2 t2 
     LEFT JOIN table3 t3 
      ON t2.ID2 = t3.ID2 
    WHERE t3.ID2 IS NULL; 
+0

哪一個是更高性能的解決方案? – MaiOM

+0

IN SS 2005+第一個查詢短路。 – JNK

+2

@MaiOM:一般來說,NOT EXISTS版本應該更好。參見[left join vs. not exists](http://sqlinthewild.co.za/index.php/2010/03/23/left-outer-join-vs-not-exists/)和[NOT IN vs. NOT EXISTS與LEFT JOIN/IS NULL:SQL Server](http://explainextended.com/2009/09/15/not-in-vs-not-exists-vs-left-join-is-null-sql-server /)。 –