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关键字来处理的,毕竟这个方式会更有效率一些。

总结

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

目录
相关文章
|
5月前
|
SQL Oracle 关系型数据库
Oracle之如何处理空值
Oracle之如何处理空值
58 0
|
Oracle Java 关系型数据库
Oracle数据库mybatis 插入空值时报错(with JdbcType OTHER)的两种解决方案
Oracle数据库mybatis 插入空值时报错(with JdbcType OTHER)的两种解决方案
445 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  ...
1059 0
|
关系型数据库
|
SQL Oracle 关系型数据库
ORACLE的count与空值比较
  今天,一同事问我,有个问题很奇怪,他写的SQL语句不统计null值,怎么一回事,看下面重现:  参与的实验数据: --创建测试表 create table mytab( col1 varchar2(10), col2 varchar2(10), col...
1034 0
|
Oracle 关系型数据库 数据库
oracle和sqlserver中空值的区别
        今天在从sqlserver导数据到oracle的过程中,oracle报错,提示不能将NULL值插入非空的列中。
951 0
|
Oracle 关系型数据库
oracle 空值处理,排序过滤
oracle认为 null 最大。 升序排列,默认情况下,null值排后面。 降序排序,默认情况下,null值排前面。 有几种办法改变这种情况: (1)用 nvl 函数或decode 函数 将null转换为一特定值 (2)用case语法将null转换为一特定值(oracle9i以后版本支持。和sqlserver类似): order by (case my
1951 0

推荐镜像

更多