MySQL 将日期与可能 return 为空的子查询的最大值进行比较
MySQL comparison of date to the max of a subquery that might return null
我有一个如下所示的 WHERE 子句:
t.triggered > (SELECT MAX(time_flag) FROM triggers)
当子查询returns一个值因为有一个整个查询正常执行
当子查询没有返回值时,比较始终为假,即使所有内容都大于 'NULL',也不会返回任何记录。
我读到 'NULL' 不适合比较,那么如何编写查询才能克服这个问题?
类似于:
t.triggered > COALESCE((SELECT MAX(time_flag) FROM triggers), '1900-01-01')
包含 NULL
值的谓词不计算为 true
或 false
:它计算为 NULL
。使用 COALESCE
您可以与一个非常旧的值进行比较,以防子查询 returns NULL
并且因此 return 来自您的 table.
的所有内容
使用 IFNULL 或 COALESCE 函数将子查询中的 NULL 值替换为默认值(某个最小日期):
t.triggered > (SELECT IFNULL(MAX(time_flag), '1000-01-01') FROM 触发器)
我有一个如下所示的 WHERE 子句:
t.triggered > (SELECT MAX(time_flag) FROM triggers)
当子查询returns一个值因为有一个整个查询正常执行
当子查询没有返回值时,比较始终为假,即使所有内容都大于 'NULL',也不会返回任何记录。
我读到 'NULL' 不适合比较,那么如何编写查询才能克服这个问题?
类似于:
t.triggered > COALESCE((SELECT MAX(time_flag) FROM triggers), '1900-01-01')
包含 NULL
值的谓词不计算为 true
或 false
:它计算为 NULL
。使用 COALESCE
您可以与一个非常旧的值进行比较,以防子查询 returns NULL
并且因此 return 来自您的 table.
使用 IFNULL 或 COALESCE 函数将子查询中的 NULL 值替换为默认值(某个最小日期):
t.triggered > (SELECT IFNULL(MAX(time_flag), '1000-01-01') FROM 触发器)