2010-08-12 66 views
2

我如何可以使用連接SQL:選擇不

SELECT * 
FROM table1 
WHERE id NOT IN 
( 
    SELECT t1Id 
    FROM table2 
); 
+0

聽起來像功課改寫下面的查詢! – JNK 2010-08-12 12:49:07

+0

不是不是,我只是好奇:) – Muhammad 2010-08-12 13:03:39

回答

0
 SELECT * FROM table1 t1 
     WHERE NOT EXISTS( 
     SELECT * 
     FROM table2 t2 
     Where t1.Id = t2.t1Id); 
+0

OP確實特別要求一種方法使用JOIN – 2010-08-12 13:12:56

+0

@Mark,ops,錯過了:( – 2010-08-12 13:19:30

+0

這似乎是一個毫無意義的規範,例如他們可以說,「重寫以下內容查詢時不使用字母'u'「,你會得到積分;) – onedaywhen 2010-08-12 14:29:26

8
SELECT * 
FROM table1 t1 
left outer join table2 t2 on t1.id=t2.id 
where t2.id is null 
+0

你很快!打我。 – Nix 2010-08-12 12:50:34

+0

非常感謝!但我不明白這個邏輯,爲什麼要使用「on t1.id = t2.id」?我們正在查找t1中未在t2中引用的行,並且您告訴它將加入t1.id = t2.id,這意味着它將在t2中引用的行上進行聯接......對我來說,它看起來不合邏輯 也,我注意到,沒有「外部」相同的查詢工作原理是一樣.. SELECT * FROM 表1 T1 左連接表2 T2上t1.id = t2.id 其中t2.id爲空 – Muhammad 2010-08-12 13:00:31

+0

@Muhammand - 中'left outer join'語法意味着即使t2的連接條件失敗,t1的行也會被返回,並且'where t2.id爲null'將過濾出連接條件失敗的所有行,如在這些情況下, t2.id將被映射爲空。 – 2010-08-12 13:03:23