NOT IN NULL和子查询的问题

一般在SELECT外面加层括号可以把集合变成值,空集变成NULL。但对NOT IN不起作用。如果NOT IN LIST后面多于一项则起作用,空集就变成空值了。
=========================================
NOT IN LIST后面只有一项的时候:
SELECT *
  FROM DUAL
WHERE 1 NOT IN (SELECT NULL FROM DUAL WHERE 1=2);

D
-
X

这里子查询返回的是空集,没有将空集变成NULL。
----------------------------------------------------------
NOT IN LIST后面多于一项的时候:
SELECT *
  FROM DUAL
WHERE 1 NOT IN ((SELECT NULL FROM DUAL WHERE 1=2), 2);

no rows selected

这里Oracle将(SELECT NULL FROM DUAL WHERE 1=2)返回的
空集转换成空值NULL。
于是,where条件等价于 1 <> (NULL, 2)
----------------------------------------------------------
IN的情况:
SELECT *
  FROM DUAL
WHERE 1 IN ((SELECT NULL FROM DUAL WHERE 1=2),1);

D
-
X

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28215864/viewspace-755778/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28215864/viewspace-755778/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值