MySql报错- 解决MySQL非聚合列未包含在GROUP BY子句报错问题

在MySQL 5.7环境下,执行包含非聚合列但未在GROUP BY子句中的查询时,会出现错误1055。为了解决这个问题,可以尝试三种方法:1) 临时修改全局或会话sql_mode,移除'ONLY_FULL_GROUP_BY'; 2) 启动MySQL时通过sql_mode选项排除该限制; 3) 修改my.conf(Windows上为my.ini)配置文件,添加sql_mode设置。请注意,这些更改可能在重启MySQL后失效或永久生效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

测试环境
win10

MySQL 5.7

问题描述:
执行类似mysql查询,
mysql> select goods_id,goods_name from group by cat_id;
报错,如下:
服务器内部错误 (1055, “Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘case_table.id’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by”)

原因:存在非聚合列 id ,没有包含在GROUP BY子句中。

但是本例中,其它地方需要用到这个id列,不能去掉,那咋办呢?如下

解决方法
方法1
查询全局sql_mode

mysql> select @@GLOBAL.sql_mode;
或者
mysql> select @@sql_mode;

查询结果如下:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

复制查询结果,然后设置GLOBAL sql_mode,SESSION sql_model为查询结果去掉 “ONLY_FULL_GROUP_BY,”的值,如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值