之前一直很困扰为什么left join要么一查没有数据,要么出现很多条重复数据。
百思不得其解,后来在网上到处找资料,总算明白了。
一定要理解下面几点:
(1)主表条件在on后面时附表只取满足主表筛选条件的值、而主表还是取整表。
(2)对于主表的筛选条件应放在where后面,不应该放在ON后面
(3)对于关联表我们要区分对待。如果是要条件查询后才连接应该把查询件
放置于ON后。
如果是想再连接完毕后才筛选就应把条件放置于where后面
(4) 对于关联表我们其实可以先做子查询再做join
--------------------下面2个sql最后得到的结果是不一样的
select a.*,d.UserName
from T_Letter a
left join T_User d on a.UserID=d.UserID
and d.UserName ='777' //条件查询后才连接 查询件放置于ON后
select a.*,d.UserName
from T_Letter a
left join T_User d on a.UserID=d.UserID
where d.UserName ='777' //连接完毕后才筛选 条件放置于where后面