我对SQL很陌生,对以下两个查询之间的差异感到困惑:
选择MAX(版本),*从表中按位置选择primary_key = @key组 选择version,* FROM表,其中primary_key = @key组按版本=MAX(版本)的位置排列
假设表看起来像这样:
primary_key | version | location | data如果我正确理解了这一点,那么两个查询都会在每个位置选择最大版本条目(在那些将@key作为主键的查询中)。那么,这两个查询之间有什么区别吗?还是仅仅在性能上有区别?
发布于 2017-06-27 14:48:56
你漏掉了表名
在使用聚合函数时,不建议使用* star (所有列),并且在大多数db中不允许使用
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)这两种查询是不同的,因为在第二种情况下,生成的查询是筛选器,以匹配有条件。
有关于查询结果的工作(而不是直接在查询的行源上工作),是的,第二个操作比第一个.大多数情况下差别可能是不明显的。
发布于 2017-06-27 14:52:48
请参考下面的链接,可能有用:http://www.dofactory.com/sql/group-by
https://stackoverflow.com/questions/44783207
复制相似问题