SELECT list is not in GROUP BY clause and contains nonaggregated column
SELECT list is not in GROUP BY clause and contains nonaggregated column问题解决方案单次解决修改配置文件使用规范的sql语句问题在单独部署项目的时候遇到了这个问题,具体意思就是:SELECT列表不在GROUP BY子句中,且包含非聚合列意思应该就是SELECT的属性必须出现在GROUP BY语句中,即类似于SELECT a.na
文章共583字 · 阅读需要大约2分钟
一键AI生成摘要,助你高效阅读
问答
·
SELECT list is not in GROUP BY clause and contains nonaggregated column
问题
在单独部署项目的时候遇到了这个问题,具体意思就是:
SELECT列表不在GROUP BY子句中,且包含非聚合列
意思应该就是SELECT的属性必须出现在GROUP BY语句中,即类似于SELECT a.name FROM user a GROUP BY a.name这种样子。
问题根源应该是sql语句的问题,但之前开发的过程中没有遇到过这样的问题。
于是网上查了一下,MySQL版本5.7.5及以上功能依赖检测功能,会默认开启ONLY_FULL_GROUP_BY SQL模式,也就是导致这个报错的原因,截图如下,具体可自行阅读参考手册,参考网址: MySql5.7参考手册.
解决方案
单次解决
连接数据库,查看当前的sql_mode
SELECT @@sql_mode;
or
SELECT @@GLOBAL.sql_mode;
or
show variables like '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这个模式就可以了
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';
但这种方式修改也就这一次生效
修改配置文件
Windows系统在MySQL的安装目录下,与bin目录同级下的的my.ini文件。
Linux系统修改my.cnf文件。
[mysqld]下面添加这段
sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
使用规范的sql语句
还是参考了文档,使用ANY_VALUE函数
链接: MySql5.7——ANY_VALUE函数.
更多推荐
已为社区贡献1条内容
所有评论(0)