MySQL右链接查询空值演示

例:有动物表tb_biology_animal和动物分类表tb_biology_animal_type
,动物表有个字段fk_animal_type_id 是和动物分类表的animal_type_id关联着的,当然此处没有设置外键,在动物表添加数据的时候,没有填写动物分类的fk_animal_type_id ,也没有做验证,而在查询显示的时候需要把没有分类的动物数据显示出来,而此时左连接查询如下:

select
        if(ISNULL(a.fk_animal_type_id),'NULL',b.type_name) typeName,
        sum(num) as count,
        unit
        from
        tb_biology_animal_type b left join tb_biology_animal a
        on
        if(ISNULL(a.fk_animal_type_id),1,a.fk_animal_type_id) = b.animal_type_id
        where b.deleted=0 and a.deleted = 0
        GROUP BY b.type_name order by count desc

返回结果:
在这里插入图片描述

而实际数据typeName是有空值的,所以正确的应该是这样的:

select IF(ISNULL(t.type_name),'NULL',t.type_name) typeName,a.count,a.unit from tb_biology_animal_type as t 
RIGHT JOIN 
(SELECT fk_animal_type_id,sum(num) count,unit  
from tb_biology_animal where deleted = 0 
GROUP BY  fk_animal_type_id  ) as a 
on a.fk_animal_type_id = t.animal_type_id order by a.count desc 
返回结果如下:

在这里插入图片描述

总结:为了避免这种查询情况出现,后面的动物添加或修改时做了分类不能为空的验证,就可以用简单一些的左连接查询的SQL了,当然已经写好的这个SQL不需要修改,只是在其他模块注意一下就可以了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值