这与 sql_mode=only_full_group_by 不兼容
时间: 2024-01-23 14:15:28 浏览: 26
sql_mode=only_full_group_by 是MySQL的一个严格模式,它要求在使用GROUP BY语句时,SELECT列表中的非聚合列必须在GROUP BY子句中出现。如果不遵守这个规则,就会出现错误代码1055,提示Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'mydb.t.address' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by。
解决这个问题的方法有两种:
1. 修改SQL语句,使用ANY_VALUE(column_name)来代替非聚合列。根据MySQL文档的说明,如果name不是t的主键或唯一的NOT NULL列,则可以使用ANY_VALUE(column_name)来解决这个问题。例如:
```sql
SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name;
```
2. 临时修改sql_mode。在MySQL 8中,可以使用any_value(field)函数来抑制ONLY_FULL_GROUP_BY模式的拒绝。这样无论sql_mode=only_full_group_by是否开启,SQL语句都可以正常执行。例如:
```sql
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
```