2010-05-18 47 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

相關問題