不同版本的MySQL Group By功能



下面是一个简单的SQL查询:

SELECT * FROM *table_name*
GROUP BY *column_name*

在我的系统中,我有MySQL 5.5。它运行得非常好。而在我朋友的系统中,他有MySQL 5.7,他得到了以下错误:

错误1055(42000):SELECT列表的表达式#1不在GROUP BY中子句,并包含非聚合列"testdb.assettentry.entryId"它在功能上不依赖于GROUP BY子句中的列;这与sql_mode=only_full_group_by 不兼容

这是显而易见的,因为版本不同。

但我想知道的是这背后的原因。

谁能解释一下吗。

首先,请阅读mySQL和postgreSQL中的Group by子句,为什么postgreSQL出现错误?

这不是SQL标准行为。

12.16.3 对GROUP的MySQL处理

若要禁用MySQL GROUP BY扩展并启用标准SQL行为,请启用ONLY_FULL_GROUP _BY SQL模式。在这种情况下,除非包含在聚合函数中,否则不能在选择列表或HAVING子句中使用GROUP BY子句中未命名的列。

在第二台服务器上,您似乎已经激活了ONLY_FULL_GROUP_BY模式。

SELECT @@sql_mode;

您可以在MySQL 5.5:上模拟这种行为

SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY';
SELECT *
FROM tab
GROUP BY col;
-- tab.col2' isn't in GROUP BY

SqlFiddleDemo


来自MySQL 5.7:

ONLY_FULL_GROUP_BY SQL模式的实现已经做得更多复杂,不再拒绝确定性查询之前被拒绝因此,ONLY_FULL_GROUP_BY现在默认情况下启用,以禁止包含表达式不能保证在组内唯一确定

相关内容

  • 没有找到相关文章

最新更新