当前位置:   article > 正文

MySql group by 分组报错 ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP BY clause

error 1055 (42000): expression #2 of select list is not in group by clause a

产生原因

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

解决方法

  1. 查看命令
select @@sql_mode; 
或者 
select @@global.sql_mode;
  • 1
  • 2
  • 3

在这里插入图片描述

  1. 修改命令
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';
如果第一条命令修改不成功的话,使用第二条命令
set @@global.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
  • 1
  • 2
  • 3

在这里插入图片描述

  1. 刷新,退出
flush privileges;
exit;
  • 1
  • 2

在这里插入图片描述
注意:以上均可在Navicat中操作,如果执行完命令,依然报错,重启Navicat即可!!!
上述方案只是通过sql语句暂时性修改sql_mode;重启mysql数据库服务之后,ONLY_FULL_GROUP_BY还会出现。如要完美解决,可以参考以下方案!

需修改mysql配置文件,通过手动添加sql_mode的方式强制指定不需要ONLY_FULL_GROUP_BY属性。

windows 在安装目录下的my.ini 文件
Mac 或者Linux 在/ etc/my.cnf

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

然后重启Mysql服务即可!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/899539
推荐阅读
相关标签
  

闽ICP备14008679号