小编典典

为什么此查询返回带有空值的行

sql

比较

SELECT distinct u_id,timestamp as time
FROM my_table;

SELECT distinct u_id,max(timestamp) as time
FROM my_table;

当我的表根本没有行时(或者如果我添加了一个不匹配行的where子句):

前者返回一个空的结果集(这是我期望的结果),而后者返回一个单行,其两个字段的值都为null。

有人可以向我解释为什么第二个为什么这样做吗?


阅读 157

收藏
2021-04-22

共1个答案

小编典典

MySQL文档说

如果没有匹配的行,则MAX()返回NULL。

而且,如果您没有数据,那么它只会将两个值都返回为NULL。

如果您希望第二个查询也返回空结果集,则必须使用可与聚合函数一起使用的HAVING子句过滤掉NULL值:

SELECT DISTINCT u_id, MAX(timestamp) as time FROM my_table GROUP BY u_id HAVING time IS NOT NULL;
2021-04-22