MySQL报错“Expression #1 of SELECT list is not in GROUP BY clause and ...

打印 上一主题 下一主题

主题 838|帖子 838|积分 2514

配景

项目开辟中,有个逻辑要用到group by,执行的时间,提示报错:
  1. Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated
  2. column 'novo_chatbot.web_users.id' which is not functionally dependent on columns in GROUP BY clause;
  3. this is incompatible with sql_mode=only_full_group_by
复制代码

字面意思就是:
  1. SELECT列表的表达式#1不在GROUP BY子句中,并且包含非聚合列“novo_chatbot.web_users.id”,
  2. 该列在功能上不依赖于GROUP BY子句的列;
  3. 这与sqlmode=only_full_group_by不兼容
复制代码
解决

一百度一个准,查看官方文档,也发现从 MySQL 5.7.5 开始,默认 SQL 模式包罗 ONLY_FULL_GROUP_BY。 (在 5.7.5 之前,MySQL 不检测函数依靠,而且默认不启用 ONLY_FULL_GROUP_BY。)这可能会导致一些sql语句失效。
直接解决吧,我本地用的homestead,先根据文档说的查看一下本地的数据库的配置,进入数据库,输入命令
  1. 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的配置,那我就直接在配置文件里,加上这个配置试试吧
  1. 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 就正常了,大功告成,又活了一天

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小小小幸运

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表