2

今天我正在阅读有关外部联接的 MySQL Docs ,我发现在外部联接完成时某些条件被拒绝为空

T1 LEFT JOIN T2 ON T1.A=T2.A

诸如此类的条件被拒绝为空:(无法从文档中理解原始文档

T2.B IS NOT NULL,
T2.B > 3,
T2.C <= T1.C,
T2.B < 2 OR T2.C > 1

谁能用简单的话解释一下。

  1. 为什么这些条件被拒绝
  2. 如果某些条件被拒绝,对查询产生的输出有什么影响。
4

1 回答 1

4

这个关于“null-rejected”条件的讨论只是关于优化比它们需要的更复杂的查询。它根本不会改变查询的行为。

考虑这个查询:

select * from table1
    left outer join table2 on table1.id=table2.id
    where table2.id is not null

此查询被编写为外连接,但它也丢弃 table2 为空的任何行(拒绝空的条件where子句中排除任何为空的行的条件)。

此查询中的where子句拒绝外部联接中的任何“外部行”。这意味着它根本不是真正的外连接。它可以重写为:

select * from table1
    inner join table2 on table1.id=table2.id

MySQL 认识到这种情况并自动优化到简化查询,而不是执行所有额外的工作来执行外连接和丢弃行。

于 2013-06-07T11:26:07.803 回答