2010-05-18 44 views
11

对于什么是x当为'X不是NULL`不一样`NOT(X是NULL)`

表达x IS NOT NULL 不等于NOT(x IS NULL),如在2VL的情况下

(引自this answer,这是引用法比安·帕斯卡尔在数据库管理实践问题 - 一种思维医生参考 - 接近这个答案的末尾)

我的猜测是当 x IS NULL NULL,但我不能猜出什么时候会是(即,我没有检查过SQL标准)。 这个猜测是错误的。

回答

15

从我读过的,Fabian Pascal没有提到com中的标量值类型为空,但很少实现的ROW类型。在标准中,想法是您可以使用IS NULL来比较一个表(行),以确定是否所有值都设置为NULL值。因此,X IS NULL意味着所有值都被设置为NULL值,X IS NOT NULL意味着没有值被设置为NULL值并且NOT (X IS NULL)意味着不是所有值都被设置为NULL值,或者换句话说,存在至少一个值值未设置为NULL。诚然,我在这里的巨人肩膀上轻描淡写,但这就是我解释他的说法的方式。

+1

Date和Pascal都可能因为没有真正清楚地拼写出来而出错。如果x是具有零和非零值混合的行,则它具有奇怪的混合状态。 – 2010-05-19 05:01:39

10

x IS NULL绝不会NULL所以他们对所有x

真值表阿霍伊相同:

+--------+-------------+---------+--------------+ 
| x |x IS NOT NULL|x IS NULL|NOT(x IS NULL)| 
+--------+-------------+---------+--------------+ 
|NULL | FALSE | TRUE | FALSE  | 
|NOT NULL| TRUE  | FALSE | TRUE  | 
+--------+-------------+---------+--------------+ 

注意列二和四是为x所有潜在值相同(或NULLNOT NULL

+0

+1使用真值表。 – EndangeredMassa 2010-05-18 17:02:25

+0

鉴于托马斯的答案,它看起来像我的'x IS NULL' * * NULL是一个红色的鲱鱼。抱歉让你误入歧途。 – 2010-05-18 17:28:12

相关问题