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