码迷,mamicode.com
首页 > 数据库 > 详细

MYSQL学习二 关于左连接

时间:2018-05-03 23:28:17      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:span   时间   SQ   rom   其他   c中   mysql   select   pre   

 

工作中有如下的SQL, 针对A.ID =‘abcdefg‘, left  join  B和C两个表,来查找其他信息。就算是B和C中没有任何满足条件的记录,最后结果也肯定不是空。因为A.ID =‘abcdefg‘是存在的。

SELECT ******
FROM tableA    A
LEFT JOIN tableB  B  on b.DELETED = 0
AND A.DELETED = 0
AND B.fid=A.ID
LEFT JOIN tableC  C ON B.XXXid=C.id AND c.DELETED = 0
WHERE A.ID =abcdefg

一开始我的写法是这样的: 把 b.DELETED = ‘0‘放在后面,这样导致结果为null, 这是因为: 如果把and b.DELETED = ‘0‘ 放在最后,是对left  join后的结果做过滤,

这个时候就有可能导致结果为null。(考虑这种情况: B和C表没有能和A连接成功的记录,如果用上面的SQL,会出结果,用这个SQL,就会null)

SELECT ******
FROM tableA    A
LEFT JOIN tableB  B  on
AND A.DELETED = 0
AND B.fid=A.ID
LEFT JOIN tableC  C ON B.XXXid=C.id AND c.DELETED = 0
WHERE A.ID =abcdefg 

and  b.DELETED = 0

 

 

上面这个问题是工作中遇到的,一不小心浪费了好多时间来fix,  SQL掌握的不好!

MYSQL学习二 关于左连接

标签:span   时间   SQ   rom   其他   c中   mysql   select   pre   

原文地址:https://www.cnblogs.com/liufei1983/p/8988020.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!