在http://dev.mysql.com/doc/refman/5.5/en/left-join-optimization.html,您可以阅读:
如果使用LEFT JOIN查找某些表中不存在的行 您有以下测试:在WHERE部分中col_name IS NULL,其中 col_name是一个声明为NOT NULL的列,MySQL停止 在它之后搜索更多行(对于特定的键组合) 找到了一行与LEFT JOIN条件相匹配的行。
任何机构都可以用人类可读的语言向我解释这是什么意思吗?或者用新手可读的语言;)
答案 0 :(得分:2)
只返回右表上没有匹配的行。这可以说明为:
如您所见,有两个表正在加入。阴影部分是Table B
上不存在的记录。
答案 1 :(得分:1)
左连接总是在右侧表中为左侧表中的每一行连接至少一行,即使右侧表中没有与连接条件匹配的行也是如此。如果发生这种情况,那么该行右侧表中的列都将为空。
这意味着在右侧表列中执行左连接然后测试null(在not null
列中)是一种有效的习惯用法,用于测试连接表中没有相应行的行。 / p>
你引用的摘录是说MySQL在执行查询这个表单时足够聪明,一旦第一个表加入就停止从右表中加入更多行(因为这样做会浪费时间)这样做 - 你已经明确表示你正在寻找右表中没有匹配的行,所以找到一行至少找到一行的行将没有用处。)