我试图从一个表中选择在另一个表中没有对应关系的行。
为此,我目前正在使用LEFT JOIN
和WHERE joined_table.any_column IS NULL
,但是我认为这不是最快的方法。
SELECT * FROM main_table mt LEFT JOIN joined_table jt ON mt.foreign_id=jt.id WHERE jt.id IS NULL
该查询有效,但是正如我所说,我正在寻找一种更快的选择。
最佳答案
您的查询是对此的标准查询:
SELECT *
FROM main_table mt LEFT JOIN
joined_table jt
ON mt.foreign_id=jt.id
WHERE jt.id IS NULL;
您也可以尝试以下方法:
SELECT mt.*
FROM main_table mt
WHERE not exists (select 1 from joined_table jt where mt.foreign_id = jt.id);
在某些版本的MySQL中,它可能会产生更好的执行计划。
关于mysql - 用JOIN进行选择,其中连接行为NULL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21308486/