原创

mysql出现Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggre错误的解决办法

作者:cndz 围观群众:672 更新于 标签:mysqlmysql报错

出现原因

mysql为5.7之前,则会默认启用ONLY_FULL_GROUP_BY SQL模式,在该模式下MySQL查询非HAVING条件或ORDER BY聚合操作在查询的列没有在group by 中出现,就会出现该错误。

 Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'table.field' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

解决办法

第一种解决办法

sql命令列界面查询下面语句。查看结果。

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,这就是我们要修改的。

第二部将该模式删除,保存即可。

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';

需要注意的两点:

第一点该设置需要SUPER权限,使用root用户或者用root用户给增加该权限即可。

第二点: 注意: 8.0.x的版本不支持NO_AUTO_CREATE_USER,去掉即可

在执行的时候我们发现就没这个问题了。

第二种解决办法

[mysqld]
sql_model=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

mysql配置文件下新增如下配置,保存重启mysql即可。