【问题标题】:MySQL comparison of date to the max of a subquery that might return nullMySQL 将日期与可能返回 null 的子查询的最大值进行比较
【发布时间】:2016-03-04 14:34:27
【问题描述】:

我有一个 WHERE 子句,如下所示:

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

当子查询因为有一个值而返回一个值时,整个查询正常执行。

当子查询没有返回值时,比较始终为 false,即使所有内容都大于 'NULL',也不会返回任何记录。

我读到“NULL”不适合比较,那么如何编写查询来克服这个问题?

【问题讨论】:

    标签: mysql null comparison where-clause


    【解决方案1】:

    类似:

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

    包含NULL 值的谓词不会计算为truefalse:它计算为NULL。使用COALESCE,您可以比较一个非常旧的值,以防子查询返回NULL,从而从您的表中返回所有内容。

    【讨论】:

      【解决方案2】:

      使用 IFNULL 或 COALESCE 函数将子查询中的 NULL 值替换为默认值(某个最小日期):

      t.triggered > (SELECT IFNULL(MAX(time_flag), '1000-01-01') FROM triggers)

      【讨论】:

      • 是的,这就是@Giorgos Betsos 推荐的,并且成功了。不过感谢您的宝贵时间
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多