我試圖做一個MySQL查詢返回行(col_a+col_b-col_c+col_d) != col_e
,其中所有的列是decimal
和默認爲null
。有一行我知道符合這些要求,但是當我使用上述邏輯運行查詢時,該行不顯示。我注意到col_c
是null
,而不是數值,並且在將其更改爲0
後,該行在我運行查詢時顯示出來。「null」在數學計算?
爲什麼會發生這種情況?我一直認爲null
在上述實例中被解釋爲0
?
我試圖做一個MySQL查詢返回行(col_a+col_b-col_c+col_d) != col_e
,其中所有的列是decimal
和默認爲null
。有一行我知道符合這些要求,但是當我使用上述邏輯運行查詢時,該行不顯示。我注意到col_c
是null
,而不是數值,並且在將其更改爲0
後,該行在我運行查詢時顯示出來。「null」在數學計算?
爲什麼會發生這種情況?我一直認爲null
在上述實例中被解釋爲0
?
NULL
(據我的理解)是不可代表的數據。對於空的唯一適當的測試是專門做處理NULL
值IS NULL
, IS NOT NULL
,和幾個功能:http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html
可以說- IFNULL(col_c, 0)+col_d
(COALESCE
會在這種情況下,相同的工作)。
與NULL
s工作的更多信息:http://dev.mysql.com/doc/refman/5.0/en/problems-with-null.html
謝謝,我沒有意識到這一點。在PHP中,'1 + null == 1'是真的,但我只是運行了一個查詢來檢查這個在MySQL中,因爲你說它不是真的。 – Nate
@ExplosionPills'IFNULL'和'ISNULL'有什麼區別嗎? –
@retailcoder'ISNULL'返回0或1.如果不是NULL,則返回第一個參數,第二個參數如果是 –
內特,NULL是NULL。 MySQL不會爲你自動進行類型轉換。解決方法是將表的列DEFAULT更改爲0.或者在表達式中使用函數IFNULL(col_c,0)。
;-)
NULL!= 0.事實上,NULL!= NULL。在進行數學計算之前,使用'coalesce()'確保空值被設置爲零。 –
不完全。 'NULL = 0'和'NULL!= 0'都不是真的;同樣,既不是NULL = NULL也不是NULL!= NULL。 (SQL使用三值邏輯,因此並非所有表達式都是真或假。) – ruakh