假设我有一个表A
,id
列,表B有一个A_id
列。 A_id
是id
的外键。现在,如果我想从A中获取所有ID,其中B有外键链接,我可以
SELECT id FROM A JOIN B ON id = A_id
但是,如何选择B 不链接到的A中的所有ID? (不选择所有id并从中减去上述子集)
答案 0 :(得分:3)
SELECT id
FROM a
WHERE id NOT IN
(
SELECT a_id
FROM b
)
这将使用反加入:对于来自a
的每条记录,它会搜索b
以获取记录的id
(使用b.a_id
上的索引)以及是否没有找到,返回记录。
答案 1 :(得分:2)
SELECT A.id FROM
A LEFT JOIN B ON A.id = B.A_id
WHERE B.A_id IS NULL;