3

http://dev.mysql.com/doc/refman/5.5/en/left-join-optimization.html可以阅读:

如果您使用 LEFT JOIN 查找某个表中不存在的行,并且您有以下测试: col_name IS NULL in the WHERE 部分,其中 col_name 是声明为 NOT NULL 的列,MySQL 停止搜索更多行(对于特定的组合键)在找到与 LEFT JOIN 条件匹配的行之后。

任何人都可以用人类可读的语言向我解释这意味着什么吗?或用新手可读的语言;)

4

2 回答 2

2

只有在右表上没有匹配的行才会被返回。这可以说明为:

在此处输入图像描述

如您所见,有两个表正在连接。阴影部分是 上不存在的记录Table B

于 2012-09-20T00:51:58.613 回答
0

左连接总是为左表中的每一行连接右表中的至少一行,即使右表中没有与连接条件匹配的行。如果发生这种情况,则右侧表中该行的列都将为空。

这意味着执行左连接然后not null在右侧表列中测试空值(在一列中)是测试连接表中没有对应行的行的有效习惯用法。

您引用的摘录是说 MySQL 在执行这种形式的查询时足够智能,一旦第一个表被加入,就停止从右侧表中加入更多行(因为这样做会浪费时间 -您已经明确表示您正在查找右侧表格中不匹配的行,因此一旦找到至少一个行,再查找更多行将毫无用处)。

于 2012-09-20T01:02:36.897 回答