我有一个WHERE CLAUSE,如下所示:
t.triggered > (SELECT MAX(time_flag) FROM triggers)
当子查询返回一个值时,因为有一个值正常执行整个查询。
当子查询没有返回值时,比较始终为false,即使所有内容都大于' NULL'也不会返回任何记录。
我读到了' NULL'不适合进行比较,那么如何编写查询以克服这个问题呢?
答案 0 :(得分:2)
类似的东西:
<img src=xyz>
包含t.triggered > COALESCE((SELECT MAX(time_flag) FROM triggers), '1900-01-01')
值的谓词,不会评估为NULL
或true
:它的计算结果为false
。使用COALESCE
,如果子查询返回NULL
,则可以与非常旧的值进行比较,从而返回表中的所有内容。
答案 1 :(得分:1)
使用IFNULL或COALESCE函数在子查询中将NULL值替换为默认值(某个最小日期):
触发&gt; (SELECT IFNULL(MAX(time_flag),'1000-01-01')FROM触发器)