首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >groupby报错not dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full

groupby报错not dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full

作者头像
共饮一杯无
发布2022-11-28 16:02:52
发布2022-11-28 16:02:52
2.2K0
举报

问题描述

MySQL执行如下group by 语句报错:1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘table_zjq.id’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

代码语言:javascript
复制
select * from table_zjq group by column_name;

解决方法

上述报错大致是group开启了严格约束,不符合sql_mode=only_full_group_by规范,only_full_group_by约束在分组时,只能对该分组的字段进行查询。(注:MySQL5.7之后的版本才会有这个问题,MySQL5.7后默认的sql_mode=only_full_group_by) 可以解决该报错的方法如下:

重新设置sql_mode

查询当前数据库的sql_mode设置:

代码语言:javascript
复制
select @@global.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

去掉ONLY_FULL_GROUP_BY后重新设置,语句如下:

  • 单个库设置
代码语言:javascript
复制
SET sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
  • 全局设置
代码语言:javascript
复制
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';

修改配置文件

windows 修改安装目录下的my.ini 文件,Linux 修改/ etc/my.cnf 。都是对应的MySQL的配置文件地址,在文件的最后加上这行:

代码语言:javascript
复制
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后问题解决。

systemctl restart mysqld

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题描述
  • 解决方法
    • 重新设置sql_mode
    • 修改配置文件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档