MySQL报错“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法

背景

项目开发中,有个逻辑要用到group by,执行的时候,提示报错:

 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated 
 column 'novo_chatbot.web_users.id' which is not functionally dependent on columns in GROUP BY clause; 
 this is incompatible with sql_mode=only_full_group_by

在这里插入图片描述

字面意思就是:

SELECT列表的表达式#1不在GROUP BY子句中,并且包含非聚合列“novo_chatbot.web_users.id”,
该列在功能上不依赖于GROUP BY子句的列;
这与sqlmode=only_full_group_by不兼容

解决

一百度一个准,查看官方文档,也发现从 MySQL 5.7.5 开始,默认 SQL 模式包括 ONLY_FULL_GROUP_BY。 (在 5.7.5 之前,MySQL 不检测函数依赖,并且默认不启用 ONLY_FULL_GROUP_BY。)这可能会导致一些sql语句失效。

直接解决吧,我本地用的homestead,先根据文档说的查看一下本地的数据库的配置,进入数据库,输入命令

 show variables like 'sql_mode';

在这里插入图片描述
确实sql_mode=ONLY_FULL_GROUP_BY。这时候要么修改这个配置,要么就是把mysq版本降下来,果断选择改配置;

找到homestead中mysql的配置文件,并修改:

进入配置文件所在目录
/etc/mysql/mysql.conf.d/ mysqld.cnf
(备注:一般mysql的配置是在vim /etc/mysql/conf.d/mysql.cnf,homestead有自己的路径)

若是有sql_mode配置项直接将ONLY_FULL_GROUP_BY去掉。但我并未找到sql_mode的配置,那我就直接在配置文件里,加上这个配置试试吧

sql_mode= STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

保存之后,执行命令service mysql restart重启mysql即可
在这里插入图片描述
为了确保配置生效,我再查看一下,生效了:
在这里插入图片描述

然后我再使用group by 就正常了,大功告成,又活了一天

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值