ERROR 1055 (42000): sql_mode = only_full_group_by不兼容
mysql> select sum(id),name from student group by name;
+---------+--------+
| sum(id) | name |
+---------+--------+
| 1 | 张三 |
| 2 | 尔四 |
| 3 | 小红 |
| 10 | 小明 |
| 5 | 小青 |
+---------+--------+
5 rows in set (0.00 sec)
mysql> select sum(id),name,code from student group by name;
ERROR 1055 (42000): Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.student.code' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
错误描述:
“错误代码:1055,SELECT列表的表达式 #1 不在GROUP BY子句中,并且包含非聚合列’test.student.code’,它在功能上不依赖于GROUP BY子句中的列; 这与sql_mode = only_full_group_by不兼容”
分析问题
1)原理层面
这个错误会发生在mysql 5.7 版本及以上版本mysql 5.7版本以上默认的sql配置是:sql_mode=“ONLY_FULL_GROUP_BY”,这个配置严格执行了"SQL92标准"。
很多程序员从5.6升级到5.7时,为了语法兼容,大部分会选择调整sql_mode,使其保持跟5.6一致,为了尽量兼容程序。
2)sql层面
在sql执行时,出现该原因,简单来说就是:
由于开启了ONLY_FULL_GROUP_BY的设置,如果select 的字段不在 group by 中,
并且select 的字段未使用聚合函数(SUM,AVG,MAX,MIN等)的话,那么这条sql查询是被mysql认为非法。
评论 (0)