我有一個WHERE子句,看起來像這樣:MySQL的比較可能返回null
t.triggered > (SELECT MAX(time_flag) FROM triggers)
當因爲有一個整個查詢通常執行的子查詢返回一個值。
當子查詢沒有返回值時,比較始終爲false,即使所有內容都大於「NULL」,也不會返回任何記錄。
我讀到'NULL'不適合比較,所以如何編寫查詢以解決此問題?
我有一個WHERE子句,看起來像這樣:MySQL的比較可能返回null
t.triggered > (SELECT MAX(time_flag) FROM triggers)
當因爲有一個整個查詢通常執行的子查詢返回一個值。
當子查詢沒有返回值時,比較始終爲false,即使所有內容都大於「NULL」,也不會返回任何記錄。
我讀到'NULL'不適合比較,所以如何編寫查詢以解決此問題?
是這樣的:
t.triggered > COALESCE((SELECT MAX(time_flag) FROM triggers), '1900-01-01')
甲含有NULL
值謂詞,不評估要麼true
,或false
:它的計算結果爲NULL
。使用COALESCE
,如果子查詢返回NULL
,則可以將其與舊值進行比較,從而返回表中的所有內容。
使用IFNULL在子查詢替換默認值(一些最小日期)NULL值或COALESCE功能:
t.triggered>(SELECT IFNULL(MAX(time_flag), '1000年1月1日')FROM觸發器)
是的這是@Giorgos Betsos推薦的,它的工作原理。不過感謝你的時間 –
是的它就像一個魅力。謝謝 –