这个mysql的坑分享给大家 希望大家以后不会踩到(不等于的坑)

问题

最近在开发过程中sql中可能有需求需要过滤某类商品,然后sql中就使用了 <>,结果测试把我坑惨了

我们来看看具体例子

这里假定我有一个用户表 user,需求是查询出所有的用户

select * from user;

在这里插入图片描述

这里可以看到有些name是为null

然后这时候因为某些业务需求我们需要过滤掉年龄为18的人
sql大致是这样的

select * from user where age <> 18;

在这里插入图片描述

神奇的事情发生了

在这里插入图片描述
这里 狄仁杰和关羽age明明是null 不为18 却被过滤掉了

这里可能和mysql底层具体细节有关系,在使用<>的时候如果那一列为空,任何比较判断都会直接判断为 true直接过滤掉,postgresql也是如此

这里为了避免这种情况的发生我们需要考虑 null这种情况

select * from user where (age <> 18 or age is null)

在这里插入图片描述
这里还有点坑就是 注意如果后面还有其他过滤条件 or两边一定要打括号啊,这个坑就不细说了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值