我试图从一个表中选择在另一个表中没有对应关系的行。

为此,我目前正在使用LEFT JOINWHERE 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/

10-11 03:26
查看更多