我是 SQL 的新手,对以下两个查询的差异感到困惑:
SELECT MAX(version), * FROM table WHERE primary_key = @key GROUP BY location
SELECT version, * FROM table WHERE primary_key = @key GROUP BY location HAVING version = MAX(version)
假设表格看起来像这样:
primary_key | version | location | data
如果我没有理解错的话,这两个查询都会选择每个位置中的最大版本条目(在那些以@key 作为主键的条目中)。那么这两个查询之间有什么区别吗?或者只是性能上的差异?
最佳答案
你错过了表名
在使用聚合函数时使用 * star(所有列)已被弃用,并且在大多数数据库中是不允许的
SELECT MAX(version)
FROM your_table
WHERE primary_key = @key
GROUP BY location
SELECT version
FROM your_table
WHERE primary_key = @key
GROUP BY location
HAVING version = MAX(version)
这两个 qyery 是不同的,因为在第二个中,结果查询是匹配 having 条件的过滤器
曾经处理过查询的结果(而不是直接处理查询的行源) 是的,第二个比第一个慢......在大多数情况下,差异可能不明显
关于mysql - GROUP BY HAVING 和 SELECT MAX() GROUP BY 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44783207/