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函数.
在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐