关于MYSQL left join 的一些细节问题

之前学 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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值