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,则可以将其与旧值进行比较,从而返回表中的所有内容。

+0

是的它就像一个魅力。谢谢 –

使用IFNULL在子查询替换默认值(一些最小日期)NULL值或COALESCE功能:

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

+0

是的这是@Giorgos Betsos推荐的,它的工作原理。不过感谢你的时间 –