2012-02-01 44 views

回答

6

A「未連接到A中的B項目」的結果如果沒有與連接條件匹配的行,左外連接將連接兩個表並返回JOIN中第二個表的空值。之後,您只需在WHERE子句中指定一個過濾器,指出您只需要連接表記錄爲空的記錄。

SELECT A.id 
FROM A 
LEFT JOIN B 
    ON B.a_id = A.id 
WHERE B.a_id IS NULL 
4
select a.name, b.last_name 
from a left outer join b on a.id = b.a_id 
where b.a_id is null 
2

我不入這裏:

SELECT id, name FROM A WHERE id not in (SELECT a_id FROM b) 
3

你也可以使用NOT EXISTS

SELECT A.id,A.name FROM A WHERE NOT EXISTS (SELECT 1 FROM B WHERE a_id=A.id) 
0
SELECT id, name 
    FROM Table_A 
EXCEPT 
SELECT id, name 
    FROM Table_A 
     INNER JOIN Table_B  
      ON id = a_id; 

看來,從接受的答案是的name投影沒有要求d,因此上面可能會被簡化:

SELECT id 
    FROM Table_A 
EXCEPT 
SELECT id 
    FROM Table_B; 
+0

此解決方案會引發額外的表掃描,排序和嵌套循環。它的執行成本是LEFT OUTER JOIN的3倍,而且我個人覺得它很難理解。 – MyItchyChin 2012-02-02 14:35:06

+0

我想你錯過了閱讀規範,然後它說「加入」。 – MyItchyChin 2012-02-03 03:43:11

+0

@MyItchyChin:在SQL中,如果你沒有明確聲明連接類型,你會得到一個內部連接。 – onedaywhen 2012-02-03 08:06:28