问题
最近在开发过程中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两边一定要打括号啊,这个坑就不细说了