SELECT left_tbl.*
FROM left_tbl LEFT JOIN right_tbl ON left_tbl.id = right_tbl.id
WHERE right_tbl.id IS NULL;
当您从左表中搜索行而没有右表中的对应行时,上面的代码可以很好地工作。
但是如何在左表中找到没有对应表的左表中的行?
答案 0 :(得分:2)
如果我理解正确,您想在LEFT_TBL
中找到两个其他表中不存在的记录吗?最具可读性的是:
SELECT a.*
FROM LEFT_TBL lt
WHERE NOT EXISTS(SELECT NULL
FROM TABLE_A a
WHERE a.id = lt.id)
AND NOT EXISTS(SELECT NULL
FROM TABLE_B b
WHERE b.id = lt.id)
使用LEFT JOIN / IS NULL:
SELECT lt.*
FROM LEFT_TBL lt
LEFT JOIN TABLE_A a ON a.id = lt.id
LEFT JOIN TABLE_B b ON b.id = lt.id
WHERE a.id IS NULL
AND b.id IS NULL
如果您希望在两个表中的一个表中不存在LEFT_TBL
条记录,请将AND
子句中的WHERE
更改为OR
。