一个码农

在大数据边缘试探 开始使用

关于 Oracle 中 null 值的踩坑记录(刚才测试,不仅仅存在与 oracle)

前言

在平时的工作中,我们或多或少都会遇到大大小小的坑,有的是我们自己不仔细造成了,有的是所使用工具本身存在的 bug ,还有的则是 所使用的工具对某个问题的处理方式与我们想当然的处理方式不同导致的。无论是哪一种坑,都会为我们的工作带来不必要的错误 与困扰,所以需要我们将其纳入自己的经验包中,多积累经验,努力打怪升级,才能迈向巅峰。

发现问题

  • 数据库值比较的时候(以前只在使用 oracle 的时候发现,目前实测 MySQL 也有同样的问题)

imagepng
首先看这个图,大家觉得 查询语句 a 查出来的结果会有几条呢?
一开始的时候,我觉得查出来是会有两条数据
但是请看结果:

imagepng
很明显,这个 age 为 null 的这条数据是没有被查出来的,应该是判断的时候,直接忽略了这条数据
(Oracle 和 MySQL 是同样的结果)
大家再来看这条 sql 语句

select * from test111 where age in (select age from test111)

乍一看,这不就是查询出所有的数据了吗?
其实不然,那条 age 为 null 的数据也没有被包括进来

imagepng

一个可菜可菜的码农

评论
18 评论
qiankunpingtai • 2019-05-04
回复 删除

关于 sql 语句空的处理可以参考这一篇
https://qiankunpingtai.cn/symphony/article/1553681360827

porkling • 2019-05-31
回复 删除

这这这

gitors 回复 lwl • 2019-06-20
回复 删除

test