我是SQL新手,对以下两个查询的区别感到困惑:
SELECT MAX(版本),* FROM表WHERE primary_key = @key GROUP BY位置
SELECT version,* FROM table WHERE primary_key = @key GROUP BY location HAVING version = MAX(version)
假设表格看起来像这样:
primary_key | version | location | data
如果我正确理解了这一点,则两个查询都会选择每个位置中的最大版本条目(在@key作为主键的那些条目中)。那两个查询之间有什么区别吗?或者只是性能差异?
答案 0 :(得分:1)
你错过了表名
使用聚合函数时使用* 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是不同的,因为在第二个结果查询是过滤器匹配有条件
在查询结果上工作(而不是直接在查询的行源上工作) 是的,第二个更慢,第一个...大多数情况下,差异可能是不明显的
答案 1 :(得分:0)
请参考以下链接,可能有用: http://www.dofactory.com/sql/group-by