今日份知识学习
今天我们来分享一个非常有意义的问题,这个问题最近出现了我的生产环境中,很是让人苦恼,就是在Oracle查询语句中,not in中的值不能存在空值,也就是空的字符串等数据。
下面我们一起来解释一下这个问题吧。
Oracle之not in中不能存在空值
这个问题的出现,是因为我想将一部分值的数据排除在外,于是就使用not in来解决这个需求,一开始是没有问题的,谁知道后来发现not in中的子查询SQL查出的有些空值。
这个现象直接导致我的主SQL查不出任何数据来了。
经过几番查找下,终于发现了这个问题点的原因,于是在子查询加入了is not null的筛选条件。
这个问题我目前还真不太清楚到底是什么样的原因,只能猜测一下not in本身不是进行排除,可能是经过了中间阶段的处理,导致了这个结果。
这就是我犯错误的整个过程了,没有办法,被臭骂了一顿。
那么我们如何来解决这个情况呢。
我目前有这两种解决方案,大家可以自行借鉴一下。
- 子查询中排除掉空值,比如使用is not null的筛选条件,以此来保证子查询中的值不会出现空值的现象。
- 第二种方法,自然就是利用not exists关键字来处理这种现象,其实原本就应该使用not exists关键字来处理的,毕竟这个方式会更有效率一些。
总结
今天分享了一个很容易碰到的问题,同时也是非常容易被忽略的问题,但愿大家生产上不会出现这么严重且低级的问题,不然扣钱后果不堪设想。