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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python ssh连接_pycharm显示no module named

    python ssh连接_pycharm显示no module named文章目录报错问题分析解决方案1.把id_rsa转换成PuTTY2.id_rsa转换成RSA参考报错在Pycharm中用密钥登录的时候会报错[1/4/202110:54AM]Uploadtogpu11-188failed:keypair‘C:\Users\xx.ssh\id_rsa’iscorruptorhasunknownformat.OnlySSH2keysinOpenSSHformat(DSA,RSAorECDSA)orPuT

    2022年8月27日
    4
  • mybatis的二级缓存_mybatis的一级缓存

    mybatis的二级缓存_mybatis的一级缓存上次谈到了mybatis一级缓存实际上是SqlSession级别的缓存,多个SqlSession并不共享,针对这种情况,我们可以使用mybatis二级缓存来处理。1.mybatis二级缓存是什么mybatis二级缓存是mybatis的另一种缓存机制,区别于一级缓存,它是namespace级别,即一个mapper一个缓存,相互独立,互不影响。默认不开启,需要配置开启。同一namespace下的多个sqlSession可以共享缓存,大体结构如下图2.二级缓存生效的条件同一个namespa.

    2022年9月20日
    2
  • Java基础之——Lambda表达式

    Java基础之——Lambda表达式Lambda表达式1、函数式编程思想概述在数学中,函数就是有输入量、输出量的一套计算方案,也就是“拿什么东西做什么事情”。相对而言,面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法——强调做什么,而不是以什么形式做。面向对象的思想:做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情。函数式编程思想:只要能获取到结果,谁去做的,怎么做的都不重要,重视的是结果,不重视过程。2、冗余的Runnable代码2.1、传统写法当需要启

    2022年7月7日
    29
  • pycharm配置环境及安装第三方库_pycharm怎么配置

    pycharm配置环境及安装第三方库_pycharm怎么配置下载git.exe(官网太慢,可去第三方)安装选择自己的路径在pycharm里添加git(具体路径为你安装的路径下的Git/cmd/git.exe)ok

    2022年8月29日
    4
  • hmac 签名_em球衣签名

    hmac 签名_em球衣签名在提供第三方接口的时候,我们需要确认:1.消息未被其他人篡改(签名和验证签名)2.从消息中确认第三方的身份(appid)因为hash是不可逆的,所以签名的过程是不可逆的;HMACSHA1是从SHA1哈希函数构造的一种键控哈希算法,被用作HMAC(基于哈希的消息验证代码)。此HMAC进程将密钥与消息数据混合,使用哈希函数对混合结果进行哈希计算,将所得哈希值与该密钥混…

    2025年7月31日
    2
  • IntelliJ IDEA 2021.1 x64激活码破解方法

    IntelliJ IDEA 2021.1 x64激活码破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    246

发表回复

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

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