mysql 报错 : this is incompatible with sql_mode=only_full_group_by
时间: 2023-10-26 18:47:41 浏览: 112
这个问题出现的原因是 MySQL 的 sql_mode 模式设置了 only_full_group_by,这个模式要求 GROUP BY 语句中的每个列都必须出现在 SELECT 列表中,否则就会报错。解决这个问题的方法有两种:
1. 修改 sql_mode 模式,在 MySQL 配置文件中将只保留 STRICT_TRANS_TABLES,将其他的模式都去掉,重启 MySQL 服务即可。
2. 修改 SQL 语句,在 SELECT 列表中增加 GROUP BY 语句中所有的列,这样就符合了 only_full_group_by 模式的要求,就不会报错了。
相关问题
mysql版本5.7.23报错this is incompatible with sql_mode=only_full_group_by
MySQL版本5.7.23中出现"this is incompatible with sql_mode=only_full_group_by"错误是因为在该版本中引入了严格的SQL模式,其中包括了only_full_group_by模式。该模式要求在使用GROUP BY语句时,必须将SELECT列表中的所有非聚合列都包含在GROUP BY子句中。
如果你的查询中存在这个错误,有以下几种解决方法:
1. 修改sql_mode:可以通过修改MySQL配置文件或者在会话中设置sql_mode参数来更改默认的SQL模式。你可以将sql_mode设置为其他模式,如"NO_ENGINE_SUBSTITUTION",以避免该错误。但是请注意,修改sql_mode可能会影响其他查询的行为,所以请谨慎操作。
2. 修改查询语句:将查询语句中的非聚合列都包含在GROUP BY子句中,以符合only_full_group_by模式的要求。
3. 使用聚合函数:如果你不需要显示非聚合列的具体值,可以考虑使用聚合函数来代替非聚合列。
date类型字段分组报错this is incompatible with sql_mode=only_full_group_by
当在MySQL数据库中设置`sql_mode=only_full_group_by`时,它意味着查询结果只允许基于列来进行完整分组(即所有非聚合函数列都必须包含在GROUP BY子句中)。如果你试图在一个包含聚合函数(如SUM、COUNT等)的查询中对非分组列进行操作,就会收到"INCOMPATIBLE WITH SQL_MODE=ONLY_FULL_GROUP_BY"这样的错误。
例如,下面的SQL会因为`date`字段没有出现在GROUP BY子句里而引发错误:
```sql
SELECT date, COUNT(*) FROM sales GROUP BY sales_amount;
```
在这个例子中,如果你想按日期分组并计算每个日期的销售记录总数,你应该修改为:
```sql
SELECT date, COUNT(*) FROM sales GROUP BY date;
```
如果确实需要在非完整分组的情况下获取数据,你可以选择关闭`ONLY_FULL_GROUP_BY`模式,但这通常不是一个好的做法,因为它会影响安全性和防止一些潜在的数据一致性问题。除非有充分的理由,否则建议调整你的查询结构使其符合规范。
阅读全文