gpt4 book ai didi

mysql - 为什么Mysql的Group By和Oracle的Group by行为不同

转载 作者:可可西里 更新时间:2023-11-01 06:53:30 24 4
gpt4 key购买 nike

为什么Mysql的Group By和Oracle的Group by行为不同

我多次发现 Mysql 的 groupBy 功能和 Oracle 的 GroupBy 功能表现不同

很多次我在 Oracle 中发现错误(这实际上是错误的查询)但是 Mysql 会给出结果

那么这个Mysql奇怪的行为背后有什么原因吗

最佳答案

MySQL 设计者将他们的非标准扩展放入 GROUP BY 中,试图使开发更容易,某些查询更高效。

这是他们的理由。

https://dev.mysql.com/doc/refman/8.0/en/group-by-handling.html

有一种名为 ONLY_FULL_GROUP_BY 的服务器模式可以禁用非标准扩展。您可以使用此语句设置此模式。

 SET SESSION SQL_MODE='ONLY_FULL_GROUP_BY'  

这是该页面的引述,并添加了重点。

If ONLY_FULL_GROUP_BY is disabled, a MySQL extension to the standard SQL use of GROUP BY permits the select list, HAVING condition, or ORDER BY list to refer to nonaggregated columns even if the columns are not functionally dependent on GROUP BY columns... In this case, the server is free to choose any value from each group, so unless they are the same, the values chosen are nondeterministic, which is probably not what you want.

这里的重要词是不确定性。这是什么意思?这意味着随机,但更糟。如果服务器选择随机值,这意味着它将在不同的查询中返回不同的值,因此您有机会在测试软件时发现问题。但在此上下文中,不确定性 意味着服务器每次都选择相同的值,直到它不选择为止。

为什么它会改变它选择的值?服务器升级是一个原因。表大小的变化可能是另一个。关键是,服务器可以自由地返回它想要的任何值。

我希望新学习 SQL 的人设置这种 ONLY_FULL_GROUP_BY 模式;他们将从查询中获得更可预测的结果,并且服务器会拒绝不确定的查询。

关于mysql - 为什么Mysql的Group By和Oracle的Group by行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21679804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com