MySQL的比较可能返回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触发器)
+0
是的这是@Giorgos Betsos推荐的,它的工作原理。不过感谢你的时间 –
是的它就像一个魅力。谢谢 –