mysql遇见Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre的问题

技术分享 · Fecmall · 于 6年前 发布 · 17980 次阅读

问题出现的原因: MySQL 5.7.5及以上功能依赖检测功能。如果启用了ONLY_FULL_GROUP_BY SQL模式(默认情况下),MySQL将拒绝选择列表,HAVING条件或ORDER BY列表的查询引用在GROUP BY子句中既未命名的非集合列,也不在功能上依赖于它们。(5.7.5之前,MySQL没有检测到功能依赖关系,默认情况下不启用ONLY_FULL_GROUP_BY。有关5.7.5之前的行为的说明,请参见“MySQL 5.6参考手册”。)

解决参考资料:

https://blog.csdn.net/qq_34707744/article/details/78031413

https://blog.csdn.net/v587_lu/article/details/51785371

共收到 5 条回复
Axin#15年前 0 个赞

恩,我也出现了这个问题,mysql 5.7版本以上就会出现。解决办法以上参考资料。

Fecmall#25年前 0 个赞

上面写的5.7以及以上,指的是mysql5版本,对于mysql8版本没有做验证

Alien#34年前 0 个赞

win 10 & mysql_5.7.18_x64同遇到以上问题。参看了 https://limh.me/post-22.html 解决了。

解决方案: 在mysql的安装目录下找到其配置文件my.ini,然后在其最底部添加如下配置:

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即可。

koflazycat#43年前 0 个赞

MySQL 8.0.20 版本也会有同样的问题,解决方法类似,但是直接复制 #3 的配置,重启服务会失败,这里提供一下新的配置:

sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

我的修改文件是 my.cnf

Fecmall#53年前 1 个赞

mysql 5.7+版本都有这个问题,配置一下即可解决

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics