MySQL 关联查询中使用 on 和 where 子句有什么区别?
// 先on条件筛选表,然后两表再做left join。而对于where来说在left join结果再次筛选。
select A.ID as AID, B.ID as BID from A left join B on A.ID = B.ID and B.ID<3 ;
//等同
select A.ID as AID, B1.ID as BID
from A left join ( select B.ID from B where B.ID <3 )B1 on A.ID = B1.ID
4 回答1.7k 阅读✓ 已解决
8 回答1.4k 阅读
2 回答1.6k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
4 回答2.3k 阅读
3 回答1.2k 阅读✓ 已解决
我是搬运工。
1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
个人理解 on 是在查询的过程中对关联表使用过滤 从而得到最终查询结果,而where是在关联查询的时候 对关联查询的结果过滤,从而得到最终结果。