2012-02-01 17 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