Oracle之not in中不能存在空值

简介: Oracle之not in中不能存在空值

今日份知识学习

今天我们来分享一个非常有意义的问题,这个问题最近出现了我的生产环境中,很是让人苦恼,就是在Oracle查询语句中,not in中的值不能存在空值,也就是空的字符串等数据。

下面我们一起来解释一下这个问题吧。

Oracle之not in中不能存在空值

这个问题的出现,是因为我想将一部分值的数据排除在外,于是就使用not in来解决这个需求,一开始是没有问题的,谁知道后来发现not in中的子查询SQL查出的有些空值。

这个现象直接导致我的主SQL查不出任何数据来了。

经过几番查找下,终于发现了这个问题点的原因,于是在子查询加入了is not null的筛选条件。

这个问题我目前还真不太清楚到底是什么样的原因,只能猜测一下not in本身不是进行排除,可能是经过了中间阶段的处理,导致了这个结果。

这就是我犯错误的整个过程了,没有办法,被臭骂了一顿。

那么我们如何来解决这个情况呢。

我目前有这两种解决方案,大家可以自行借鉴一下。

  1. 子查询中排除掉空值,比如使用is not null的筛选条件,以此来保证子查询中的值不会出现空值的现象。
  2. 第二种方法,自然就是利用not exists关键字来处理这种现象,其实原本就应该使用not exists关键字来处理的,毕竟这个方式会更有效率一些。

总结

今天分享了一个很容易碰到的问题,同时也是非常容易被忽略的问题,但愿大家生产上不会出现这么严重且低级的问题,不然扣钱后果不堪设想。

目录
相关文章
|
6月前
|
SQL Oracle 关系型数据库
Oracle查询优化-处理空值
【1月更文挑战第1天】【1月更文挑战第1篇】数据库中的空值(例如:NULL或者 '')会导致一些不可预知的错误,因此需要在查询时就要处理好,确保数据查询的准确性,减轻代码压力。
175 0
|
6月前
|
SQL Oracle 关系型数据库
Oracle之如何处理空值
Oracle之如何处理空值
168 0
|
6月前
|
Oracle 关系型数据库 数据库
Oracle查询优化-处理排序空值
【1月更文挑战第3天】【1月更文挑战第8篇】在处理Oracle查询结果排序时,如果涉及到空值(null),Oracle提供了一些特定的语法来帮助您控制排序的顺序。
72 0
|
Oracle Java 关系型数据库
Oracle数据库mybatis 插入空值时报错(with JdbcType OTHER)的两种解决方案
Oracle数据库mybatis 插入空值时报错(with JdbcType OTHER)的两种解决方案
654 0
|
Oracle 关系型数据库 Java
在使用MyBatis连接Oracle进行查询时遇到查询结果集不为空, 某些字段空值情况
在使用MyBatis连接Oracle进行查询时,出现运行结果正常,但是名字取值为空的情况
在使用MyBatis连接Oracle进行查询时遇到查询结果集不为空, 某些字段空值情况
|
SQL Oracle 关系型数据库
ORACLE参数max_shared_servers空值与零的区别
ORACLE数据库中的参数max_shared_servers,这是一个DBA很熟悉的参数,但是这个参数max_shared_servers为空值与为0有区别吗?这个细节可能很多人都没有注意过。如下所示:     SQL> show parameter max_shared_servers  ...
1089 0
|
关系型数据库
|
SQL Oracle 关系型数据库
ORACLE的count与空值比较
  今天,一同事问我,有个问题很奇怪,他写的SQL语句不统计null值,怎么一回事,看下面重现:  参与的实验数据: --创建测试表 create table mytab( col1 varchar2(10), col2 varchar2(10), col...
1074 0