SQL中因为null导致的空结果
问题
无论SQL执行怎么样,都是得到空结果
结论
原因是 group by
和 where
之后只认识true
or false
, 然而我的数据里面有null, null 和 比较运算符得到的结果是 UNKNOW
, 所以就会像上图中任何运算符都没有结果,所以大家如果遇到了同样的问题可以查看一下自己的数据
验证
我用一个干净的数据测试了一下确实是这样的
参考
这里有很详细的探讨和代码,建议有兴趣的拓展阅读
https://www.cnblogs.com/killkill/archive/2010/09/04/1817266.html
提取上文大佬的结论
- in/not in 的结果是依赖于“=”等值判断的结果;exists/not exists 虽然是判断集合是否为空,但通常里面的子查询做的是值判断
- minus消灭了重复行!这就是前文所说的 not in 和 not exists 并非真正意义上的差集。
优化(写出鲁棒性更好的SQL!)
优化依据
in/not in 的结果是依赖于“=”等值判断的结果;exists/not exists 虽然是判断集合是否为空,但通常里面的子查询做的是值判断
执行
所以在group by
之前都执行以下where \*.\* is not null
1 | select student.sno,sname,avg(Grade) |