之前学 mysql 的时候 A left join B 应该是保全 A 表数据如果B表没有则显示 Null, 发现在衔接 where 语句的时候还有一些细节要考虑
因为 where 是最后执行进行筛选,因此如果B表里面没有出去会被过滤掉
即:
如果where的条件和 A相关, 还是会有 B的Null
如果where的条件和B相关, 不会B的null值
解决方式:
在where之前先筛一遍B
方法一. 使用 ON...AND 语句:
SELECT SQL_NO_CACHE platform, status
FROM Platform left join crawlerStatus
ON Platform.id=crawlerStatus.platform_id AND batch_time=%s
方法二, 先select B然后二次嵌套查询
延伸问题:
left join 如何使得 B表中的数据如果是NULL 直接被替换成0或者其他数值? (虽然还没用过但是感觉之后肯定会用到)
select a.A1,a.A2,isnull(b.sB2,0) B2
from A a
left join (select A1,sum(B2) as sB2 from B group by A1) as b on b.A1=a.A1