MySQL报错1055 – Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated 解决方法

MySQL报错1055 – Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated 解决方法

1、问题复现:

  今天在进行数据迁移时,使用Navicat连接数据库进行连接时,由于 SQL语句中使用了 group by分组函数,结果报了如下错误:

<span>MySQL报错1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated 解决方法</span>

2、产生原因

  产生原因说是,在MySQL数据库版本为5.7以上的版本,默认开启了 ONLY_FULL_GROUP_BY SQL模式,在此模式下,对于group by操作,如果在select语句中的查询列没有在group by中出现,那么这个SQL就是非法的,因为列不在group by语句中,所以设置了sql_mode=only_full_group_by的数据库,在使用group by时就会报错。

3、问题解决

  既然是 MySQL配置问题,找到了原因,就好对症下药进行解决了。

方法一:

  在Navicat中,输入下列SQL语句进行查询:

SELECT @@GLOBAL.sql_mode;

  查询结果如下:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

  通过上面的查询结果,可以看到 开启了 ONLY_FULL_GROUP_BY 模式,这里第一种解决方案就是,去除 ONLY_FULL_GROUP_BY,重新设置值。

  解决方法如下:

set @@global.sql_mode 
='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

  执行完上面的SQL语句之后,再次执行报错的SQL语句,发现可以正常运行了。

方法二:

  除了上面的手动设置sql_mode值之外,还可以在 MySQL 的配置文件中进行设置。

  1、对于 Linux系统,进到 /etc/my.cnf 文件下,查询sql_mode字段,由于在配置文件中未找到这个关键字,所以我在

    [mysqld] 配置中手动添加进去:
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

   添加完之后,保存退出,重启 MySQL 即可生效。

  2、对于windows系统,进行 MySQL安装目录下,找到 my.ini 文件,同样在配置文件中搜索sql_mode关键字,

        若未搜索到,则需要在  [mysqld] 配置中手动添加进去:

sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

   添加完毕之后,保存退出,然后重启一下 MySQL 服务即可生效。

参考链接:

    https://www.cnblogs.com/52lnamp/p/9294330.html

    https://www.cnblogs.com/chancy/p/10026097.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2240.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java嵌套条件运算符_java条件运算符的嵌套使用「建议收藏」

    java嵌套条件运算符_java条件运算符的嵌套使用「建议收藏」对于java条件运算符的嵌套使用你熟悉吗?下面要给大家带来的就是和这方面有关的编程题,一起来了解一下。一、题目学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示注:利用条件运算符的嵌套来完成这道题目二、思路(a>b)?a:b这是条件运算符的基本例子三、代码实现publicclassProg5{publicstaticvoidmain(Strin…

    2022年9月28日
    0
  • android之android.intent.category.DEFAULT的用途和使用

    1、要弄清楚这个问题,首先需要弄明白什么是implicit(隐藏) intent什么是explicit(明确) intent。 Explicit Intent明确的指定了要启动的Acitivity ,比如以下Java代码:Intent intent= new Intent(this, B.class);Implicit Intent没有明确的指定要启动哪个Activity …

    2022年3月10日
    163
  • window.top.location.href 和 window.location.href 的区别

    window.top.location.href 和 window.location.href 的区别

    2021年10月9日
    42
  • MySQL安装(详细,适合小白)

    MySQL安装(详细,适合小白)MySQL安装一、mysql安装包下载二、配置my.ini文件三、初始化MySQL四、可能遇到的错误操作一、mysql安装包下载官网下载地址:mysql安装包下载如图所示:二、配置my.ini文件解压后的文件尽量不要放在C盘(内存小),解压后如下图所示在上图所示梗目录下配置my.ini文件[mysqld]#设置3306端口port=3306[mysqld]#设置3306端口port=3306#设置mysql的安装目录(存放地址可以更改)basedir=E:\My

    2022年6月6日
    39
  • kafka集群搭建及简单使用

    kafka集群搭建及简单使用KafkaKafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Li…

    2022年6月10日
    34
  • FlashFXP 3.6 Final(正式版)注册码

    FlashFXP 3.6 Final(正式版)注册码昨天登陆FTP提示是否要升级,也没有注意点了下同意,结果升级后是最新英文版本的,把原来的资料也给丢了,忙了半天一看原来的注册码已经不好使用,在网上搜索下,找到一个可以使用的注册码和大家分享下:———————————————————FLASHFXPxgA9UrTnxgAAAAC7W5MNJwTnsl73n0Vuu1AePJgEAG41mgSvHSiDWi1Kg8B5xJNCCCAVCMr9R

    2022年7月26日
    14

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号