mysql - 为什么此查询返回空行

标签 mysql sql null resultset

比较

SELECT distinct u_id,timestamp as time
FROM my_table;

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

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

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

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

最佳答案

MySQL 文档说

MAX() returns NULL if there were no matching rows.

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

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

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

关于mysql - 为什么此查询返回空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7545766/

相关文章:

mysql - node.js 和 mysql - 需要来自 select 的数据来更新

php - 如何检查用户是否对评论进行了评分?

mysql - 如何在 sql CASE WHEN 表达式中保持状态

scripting - 如何检查是否在 ant 脚本中设置了 dos 环境属性

java - 在 Java/Scala 项目中检查 null 与匹配

mysql - 增加整个数据库的值

mysql - IF (SUBQUERY) = SOMETHING SELECT A ELSE SELECT B MySql

sql - 插入存储过程后返回,成功则返回1,否则返回0

MySQL:将数据从一个表移动到具有不同模式的另一个表

java - 包含 CSV 文件数据的 Arraylist 充满了空值?