【问题标题】:LEFT JOIN and IS NULL effectLEFT JOIN 和 IS NULL 效果
【发布时间】:2012-09-20 09:12:45
【问题描述】:

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

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

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

【问题讨论】:

    标签: mysql sql left-join


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-25
        • 2015-09-22
        • 1970-01-01
        • 1970-01-01
        • 2023-03-26
        • 2021-11-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多