即使你认为自己已对 MySQL 的 LEFT JOIN 理解深刻,但我敢打赌,这篇文章肯定能让你学会点东西!
- ON 子句与 WHERE 子句的不同
- 一种更好地理解带有 WHERE ... IS NULL 子句的复杂匹配条件的简单方法
- Matching-Conditions 与 Where-conditions 的不同
on: a表一条一条的记录的往下,然后on负责从b表中检索出对应满足条件的记录。
然后是where子条件匹配语句,就负责从匹配的结果中再过滤结果。
--
然后得出的结论就是: sql语句也是慢慢写出来的,把关系先理清楚,然后大致得出结果集,
然后再在结果集里,过滤筛选,不必一步到位。
====
http://www.oschina.net/question/89964_65912#tags_nav
===================================================================
我们可以想象left join 是这样工作的从左表读出一条,选出所有与on匹配的右表纪录(n条)进行连接, 形成n条纪录(包括重复的行,如:结果1和结果3),如果右边没有与on条件匹配的表,那连接的字段都是null.然后继续读下一条。引申: 我们可以用右表没有on匹配则显示null的规律, 来找出所有在左表,不在右表的纪录, 注意用来判断的那列必须声明为not null的。列值为null应该用is null 而不能用=NULL,
/////
sql:
select id, name, action from user as u
left join user_action a on u.id = a.user_id
where a.user_id is NULL
(注意:1.列值为null应该用is null 而不能用=NULL
2.这里a.user_id 列必须声明为 NOT NULL 的)
=======