报错问题:
SQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'selad.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by"
原因:
在MySQL 5.7后MySQL默认开启了SQL_MODE严格模式,对数据进行严格校验。
会报sql_mode=only_full_group_by错误说明写的SQL语句不严谨,
对于group by聚合操作,select中的列只能是出现在group by中的列,使用聚合函数除外,如max()、min()等
解决方式①:
使用 group_concat() 或 any_value()
group_concat():将分到同一组的数据默认用逗号隔开作为返回数据
any_value():将分到同一组的数据里第一条数据的指定列值作为返回数据
修改后语句如下:
select GROUP_CONCAT(id), GROUP_CONCAT(no), uid from user_order group by uid;
select any_value(id), any_value(no), uid from user_order group by uid;
解决方式②:
select @@global.sql_mode;
SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
-- 刷新
flush privileges;
解决方式③:
永久生效,修改配置文件my.ini
在[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'
保存,重启后生效。
原文链接:http://www.yaotu.net/biancheng/1203.html
标签:full,group,NO,MySQL,ZERO,mode,sql From: https://www.cnblogs.com/a999/p/16880595.html