今天我正在阅读有关外部联接的 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
谁能用简单的话解释一下。
- 为什么这些条件被拒绝
- 如果某些条件被拒绝,对查询产生的输出有什么影响。
这个关于“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 认识到这种情况并自动优化到简化查询,而不是执行所有额外的工作来执行外连接和丢弃行。