@H_403_1@
select 'true' from dual where 1 not in (null,1);
当我们执行此操作时,什么都不会产生
我的问题是:
以上查询在逻辑上等效于
select 'true' from dual where 1 != null and 1 != 1;
这将不会像上述声明那样产生任何结果
请澄清?
解决方法
正确(但请注意,IN是一个运算符,而不是一个子句,它在sql中的工作方式与此类似,不仅适用于Oracle).
where 1 not in (null,1)
相当于:
where 1 != null and 1 != 1
这应该写成:
WHERE 1 NOT IN (NULL,1)
和
WHERE 1 <> NULL AND 1 <> 1
这与:
WHERE (1 <> NULL) AND (1 <> 1)
其评估结果为:
WHERE UNKNOWN AND FALSE
并进一步:
WHERE FALSE
因此,它正确地返回没有行.
请注意,如果你有WHERE 1 NOT IN(NULL,2),它将评估为WHERE UNKNOWN(作为练习留下),也不会返回任何行.