Oracle:1 not in (null)检索不出结果
in/not in在判断NULL时用的与=/<>一样的方式,即必须用is null来判断,否则始终为失败。
语句
select 'true' from dual where (1,2) not in ((2,3),(2,null));
成功的原因在于判断二元值时首先判断其中一个非null元素,该元素成功或者失败会“短路”另一个个。由于上述第一个元素就使not in成功了,因此第二个元素就不再处理。
语句
select 'true' from dual where (2,1) not in ((2,3),(2,null));
的第一个元素没有造成“短路”,因此引起了null判断,从而结果始终为失败。
请再实验语句
select 'true' from dual where (2,1) not in ((2,3),(null,3));
其结果为true,原因是第二个元素短路了第一个元素。
以上分析纯属个人观点,仅供参考。
转自http://topic.csdn.net/t/20041230/12/3688313.html
相关文档:
1、什么是存储过程。存储过程是数据库服务器端的一段程序,它有两种类型。一种类似于SELECT查询,用于检索数据,检索到的数据能够以数据集的形式返
回给客户。另一种类似于INSERT或DELETE查询,它不返回数据,只是执行一个动作。有的服务器允许同一个存储过程既可以返回数据又可以执行动作。
2、什么时候需要用存储过程
......
总结了一下删除重复记录的方法,以及每种方法的优缺点。
假设表名为Tbl,表中有三列col1,col2,col3,其中col1,col2是主键,并且,col1,col2上加了索引。
1、通过创建临时表
可以把数据先导入到一个临时表中,然后删除原表的数据,再把数据导回原表,SQL语句如下:
creat table tbl_tmp (select distinct* from tb ......
PL/SQL
块结构
DECLARE
声明部分
BEGIN
可执行部分
EXCEPTION
异常处理部分
END;
例:
首先我们看一个简单之例子,下面这个例子是统计从1 ......
C#中操作Oracle时的SQL语句参数的用法
OracleTransaction myTrans ;
conn.Open();
myTrans =conn.BeginTransaction(IsolationLevel.ReadCommitted) ......