this is incompatible with sql_mode=only_full_group_by 解决
时间: 2023-09-21 17:02:42 浏览: 135
这个错误是因为 MySQL 的 SQL 模式设置了 `only_full_group_by`,这个模式要求 GROUP BY 语句中的所有列都必须在 SELECT 列表中出现,或者使用聚合函数对它们进行计算。
如果你的 SQL 查询中使用了 GROUP BY,但是 GROUP BY 中的某些列在 SELECT 列表中没有出现或者没有使用聚合函数,就会触发这个错误。
解决方法有两种:
1. 修改 SQL 模式
可以通过修改 MySQL 的 SQL 模式来禁用 `only_full_group_by`,具体的方法是在 MySQL 配置文件中添加以下行:
```
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
```
其中 `NO_ENGINE_SUBSTITUTION` 是禁用 `only_full_group_by` 的选项。
2. 修改查询语句
如果不想修改 SQL 模式,也可以修改查询语句,让它符合 `only_full_group_by` 的规则。具体的方法是在 GROUP BY 语句中包含所有 SELECT 列表中的列,或者使用聚合函数对它们进行计算。
例如,下面的查询语句会触发 `only_full_group_by` 错误:
```
SELECT name, COUNT(*) FROM mytable GROUP BY name;
```
可以修改为:
```
SELECT name, COUNT(*) FROM mytable GROUP BY name, id;
```
或者:
```
SELECT name, MAX(id), COUNT(*) FROM mytable GROUP BY name;
```
这样就可以避免错误了。
阅读全文