2013-05-15 63 views
1

我試圖做一個MySQL查詢返回行(col_a+col_b-col_c+col_d) != col_e,其中所有的列是decimal和默認爲null。有一行我知道符合這些要求,但是當我使用上述邏輯運行查詢時,該行不顯示。我注意到col_cnull,而不是數值,並且在將其更改爲0後,該行在我運行查詢時顯示出來。「null」在數學計算?

爲什麼會發生這種情況?我一直認爲null在上述實例中被解釋爲0

+1

NULL!= 0.事實上,NULL!= NULL。在進行數學計算之前,使用'coalesce()'確保空值被設置爲零。 –

+1

不完全。 'NULL = 0'和'NULL!= 0'都不是真的;同樣,既不是NULL = NULL也不是NULL!= NULL。 (SQL使用三值邏輯,因此並非所有表達式都是真或假。) – ruakh

回答

3

NULL(據我的理解)是不可代表的數據。對於空的唯一適當的測試是專門做處理NULLIS NULL, IS NOT NULL,和幾個功能:http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html

可以說- IFNULL(col_c, 0)+col_dCOALESCE會在這種情況下,相同的工作)。

NULL s工作的更多信息:http://dev.mysql.com/doc/refman/5.0/en/problems-with-null.html

+0

謝謝,我沒有意識到這一點。在PHP中,'1 + null == 1'是真的,但我只是運行了一個查詢來檢查這個在MySQL中,因爲你說它不是真的。 – Nate

+0

@ExplosionPills'IFNULL'和'ISNULL'有什麼區別嗎? –

+0

@retailcoder'ISNULL'返回0或1.如果不是NULL,則返回第一個參數,第二個參數如果是 –

1

內特,NULL是NULL。 MySQL不會爲你自動進行類型轉換。解決方法是將表的列DEFAULT更改爲0.或者在表達式中使用函數IFNULL(col_c,0)。

;-)