mysql左连接值变null_MySQL左右连接查询中的NULL的数据筛选问题

这里使用左连接为例子,对于左连接是将左边表的数据显示,右边表中如果没有对应的数据则使用null填充。

game表:

2c621e8e2931657ce03260c7b910e90d.png

game_type表:

4c763539a9d0744ea86067eb99d30fa3.png

SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id

这里的语句得到的内容:

c978f987d33c732b4bbb6e4c34c4a1aa.png

这里我们如果想将没有游戏类型的游戏信息去掉:

SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id where t.type_name!=''

也可以这样:

SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id where not ISNULL(t.type_name)

ee4df51650cd19b3852cf033ab75dbb6.png

上面两条语句得到的结果是一样的,事实上准确点来说是应该使用第二条,因为如果在game表中的游戏5记录对应的type_id是一个没有type_name的类型,如下图:

game表:

aacebf6d558bff34e3620d150f567930.png

game_type表:

3340ec336a8930e10b944f1a8f092b7a.png

使用语句:SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id where t.type_name!=''得到的结果:

1fc4c142a2ae8063efc4f432800d680e.png

但是游戏5是有游戏类型的,只是游戏类型为空。所以这时候使用下面语句得到的结果才是正确的:

SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id where not ISNULL(t.type_name)

e550b05a174a41abeb532e7373a924d7.png

这里我们将game表中的游戏5记录对应的type_id记录设置为0,那么使用:

SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id

得到的内容:

dc0fbd4c32a2718ce965f9e1fff329c5.png

假如这里我们想将游戏5的记录筛选出来,就是筛选游戏表中没有对应的游戏类型记录:

因为刚刚我们使用语句:SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id where t.type_name!=''

可以将游戏5筛选掉,那么这里如果我们设置成下面这样:

SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id where t.type_name=''

b8f4f44030ce8b6c7fc1307f3273b4a1.png

结果不能游戏5给筛选出来,这时候需要的是:

SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id where ISNULL(t.type_name)

64218c40e7849b2710983ed607b3e6d3.png

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值