sql_mode=only_full_group_by 不兼容。
时间: 2023-10-28 12:54:03 浏览: 39
这是因为在MySQL 5.7之后的版本中,sql_mode默认启用了only_full_group_by模式,该模式要求在使用GROUP BY语句时必须将所有非聚合的列都包含在GROUP BY语句中。如果查询中使用了GROUP BY语句但未将所有非聚合的列都包含在其中,则会报错。
解决方法是将sql_mode的值修改为其他模式,如: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'。或者在查询中将所有非聚合的列都包含在GROUP BY语句中。
相关问题
sql_mode=only_full_group_by不兼容
在MySQL 5.7.5及更高版本中,默认开启了ONLY_FULL_GROUP_BY的SQL模式。如果你想要使用不兼容ONLY_FULL_GROUP_BY的语句,可以修改sql_mode设置来解决。有两种方法可以修改sql_mode设置,第一种是修改已经存在的数据库的sql_mode,可以使用语句"set sql_mode=' '"进行修改。第二种是修改全局配置的sql_mode,可以使用语句"set @@global.sql_mode=' '"进行修改。通过这两种方法,你可以去掉ONLY_FULL_GROUP_BY,使得sql_mode兼容你的语句。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [MySQL: 与only_full_group_by模式不兼容的两个解决办法](https://blog.csdn.net/fly910905/article/details/119147800)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
这与 sql_mode=only_full_group_by 不兼容
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',''));
```