Table A
(id, name)
1 | alice
2 | bob
Table B
(a_id, last_name)
1 | in wonderland
我想知道SQL查詢(使用連接)來獲得的如何使用一個SQL JOIN
a.2|a.bob
Table A
(id, name)
1 | alice
2 | bob
Table B
(a_id, last_name)
1 | in wonderland
我想知道SQL查詢(使用連接)來獲得的如何使用一個SQL JOIN
a.2|a.bob
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
select a.name, b.last_name
from a left outer join b on a.id = b.a_id
where b.a_id is null
我不入這裏:
SELECT id, name FROM A WHERE id not in (SELECT a_id FROM b)
你也可以使用NOT EXISTS
SELECT A.id,A.name FROM A WHERE NOT EXISTS (SELECT 1 FROM B WHERE a_id=A.id)
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;
此解決方案會引發額外的表掃描,排序和嵌套循環。它的執行成本是LEFT OUTER JOIN的3倍,而且我個人覺得它很難理解。 – MyItchyChin 2012-02-02 14:35:06
我想你錯過了閱讀規範,然後它說「加入」。 – MyItchyChin 2012-02-03 03:43:11
@MyItchyChin:在SQL中,如果你沒有明確聲明連接類型,你會得到一個內部連接。 – onedaywhen 2012-02-03 08:06:28