select 'true' from dual where 1 not in (null,1);
当我们执行这个这将导致什么
什么我的问题是:
是上述查询逻辑上等同于
select 'true' from dual where 1 != null and 1 != 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
(作为一个练习左)和没有行会或者返回。
你的脚本与NULL值进行比较的问题。 您应该使用
column is null and column = 1
其实NULL为不定值。 与任何为NULL的比较 - 给非真非假,但NULL。 即使NULL = NULL
这就是为什么你没有1中(NULL,1)不工作。
对,他们是。
select something from table where column not in (1,2,3);
相当于
select something from table where column != 1 and column != 2 and column != 3;
中陈述或语句的集合,同时也不是和语句的集合 - 但它也并不等于。
因此,NOT IN等同于:
1 <> NULL
AND 1 <> 1
AND ...
虽然在将相当于:
1 = NULL
OR 1 = 1
OR ...
需要注意的是集合中有NULL将无法正常工作,由于NULL的奇特性质。
是。 它是正确的。 此外NULL值应为NULL进行比较