两个相似的 MySQL 查询给出不同的结果
Posted
技术标签:
【中文标题】两个相似的 MySQL 查询给出不同的结果【英文标题】:Two similar MySQL queries give different results 【发布时间】:2012-06-29 13:56:26 【问题描述】:我有一个保存设备读数的数据库。我正在尝试编写一个可以从设备中选择最新读数的查询。我有两个看似相同的查询,我希望给出相同的结果;但是他们没有。查询如下:
第一个查询:
select max(datetime), reading
from READINGS
where device_id = '1234567890'
第二次查询:
select datetime, reading
from READINGS
where device_id = '1234567890' and datetime = (select max(datetime)
from READINGS
where device_id = '1234567890')
它们都为阅读属性提供不同的结果。第二个是给出正确结果的那个,但为什么第一个给出不同的结果?
【问题讨论】:
【参考方案1】:这是 mysql 的行为。当您使用分组时,您选择的列必须要么出现在分组依据中,要么是一个聚合函数,例如 min()、max()。在大多数其他数据库风格中,不允许混合聚合和普通列。
第一个查询将只返回每个组中的第一个评级(首先是它出现在文件系统上的位置),这很可能是错误的。
第二个查询将评级与导致正确结果的最大时间戳相关联。
【讨论】:
所以如果我在 MSSQL 之类的东西中尝试第一个,它可能会向我吐口水并告诉我我错了? @Perley 第一次查询?很有可能,我相信只有 SQLite 在这方面的行为与 MySQL 相同。【参考方案2】:这是因为您没有使用 GROUP BY reading
子句,您应该在两个查询中都使用它。
【讨论】:
那根本行不通。它给了我完全不同的东西。当阅读甚至不是我要汇总的内容时,我为什么要使用 group by?【参考方案3】:这在 MySQL 上是正常的。请参阅documentation:
If you use a group function in a statement containing no GROUP BY clause, it is equivalent to grouping on all rows.
另外,请阅读http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html
【讨论】:
【参考方案4】:您可以使用Explain 和Explan extended 命令来了解有关您的查询的更多信息。
【讨论】:
以上是关于两个相似的 MySQL 查询给出不同的结果的主要内容,如果未能解决你的问题,请参考以下文章
为啥这个 MySQL 存储函数给出的结果与在查询中进行计算不同?