2016-03-04 55 views
0

我有一個WHERE子句,看起來像這樣:MySQL的比較可能返回null

t.triggered > (SELECT MAX(time_flag) FROM triggers) 

當因爲有一個整個查詢通常執行的子查詢返回一個值。

當子查詢沒有返回值時,比較始終爲false,即使所有內容都大於「NULL」,也不會返回任何記錄。

我讀到'NULL'不適合比較,所以如何編寫查詢以解決此問題?

回答

2

是這樣的:

t.triggered > COALESCE((SELECT MAX(time_flag) FROM triggers), '1900-01-01') 

甲含有NULL值謂詞,不評估要麼true,或false:它的計算結果爲NULL。使用COALESCE,如果子查詢返回NULL,則可以將其與舊值進行比較,從而返回表中的所有內容。

+0

是的它就像一個魅力。謝謝 –

1

使用IFNULL在子查詢替換默認值(一些最小日期)NULL值或COALESCE功能:

t.triggered>(SELECT IFNULL(MAX(time_flag), '1000年1月1日')FROM觸發器)

+0

是的這是@Giorgos Betsos推薦的,它的工作原理。不過感謝你的時間 –