当前位置: 首页 > 面试题库 >

不同版本的MySQL Group By功能

费明诚
2023-03-14
问题内容

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

SELECT * FROM *table_name*
GROUP BY *column_name*

在我的系统中,我有MySQL 5.5。它工作正常。而在我朋友的系统中,他拥有MySQL 5.7,并且遇到以下错误:

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

可以清楚地看到这是由于版本不同而发生的。

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

谁能解释一下。


问题答案:

这不是SQL标准的行为。

12.16.3 MySQL对GROUP BY的处理

要禁用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](http://sqlfiddle.com/#!9/558433/3/2)**

从MySQL 5.7:

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



 类似资料:
  • 问题内容: 我们正在使用JBoss 4.2.3,该版本又带有Hibernate的3.2.1.ga版本。我想使用支持JPA 2.0的Hibernate 3.5.1-FINAL。我一直在尝试通过将自己的hibernatejar放入WEB-INF / lib文件夹并在jboss- web.xml中为WAR创建自己的类加载器来使其工作 我也尝试过: 但是我遇到了很多问题,这是我目前坚持的例外情况: 由于最

  • 问题内容: 是否可以在同一台计算机上安装不同版本的NodeJS? 问题答案: 您可以使用几种节点管理器来实现此目的,但是最受欢迎的是: 虚拟机 ñ

  • 问题内容: 我正在Windows Surface Pro上测试Java。表面Pro拥有的Java 7更新55,但 不 具备安装JDK。 我使用命令行在MacBook上编译了一个程序。MacBook具有Java 8 Update 5,并且包含JDK(显然是因为我在MBP上编译)。 将程序从MackBook移到Surface Pro时,出现以下错误。在这里,“移动程序”意味着将两个文件复制到新机器上并

  • 我试图找到解释这种差异的视频或文本,但没有找到任何能说服我的东西。我才刚刚开始,如果可能的话,我只想专注于IDE。我正在研究JScript(vue)框架,我已经在使用VSCode来实现这一点。 附言:原谅我的英语。我知道这很可怕 坦克

  • 今天我和jenv一起玩,将Java1.8设置为全局版本,将1.7设置为本地项目。此后,mvn命令在全局位置显示为java版本12- 而Java版本显示如预期- 我试图卸载和安装maven通过sdkman再次,在Mac上。虽然它没有新鲜下载。我仍然得到同样的错误。 我该怎么解决这个问题?

  • 我正在使用Maven和Jetty作为服务器开发RestEasy Web服务。其中一个服务应该使用扩展javax.servlet.http.HttpServletReportseWrapper的Filter。问题在于来自servlet-api 2.3的接口javax.servlet.ServletReages的方法集特征编码。我得到了以下异常 我已经规范了servlet-api 2.4依赖项,但也尝