解决 this is incompatible with sql_mode=only_full_group_by
时间: 2023-11-14 09:09:15 浏览: 150
这个错误通常是因为 MySQL 的 sql_mode 设置了 only_full_group_by,而查询中使用了 GROUP BY,但是 SELECT 中的列没有全部出现在 GROUP BY 中,或者 SELECT 中使用了聚合函数,但是没有使用 GROUP BY。解决方法有两种:
1. 修改 MySQL 的 sql_mode 设置,去掉 only_full_group_by。可以在 MySQL 配置文件中修改,或者在连接 MySQL 时设置 SET sql_mode=''。
2. 修改查询语句,让 SELECT 中的列全部出现在 GROUP BY 中,或者使用聚合函数并且使用 GROUP BY。
相关问题
怎么用久解决this is incompatible with sql_mode=only_full_group_by
这个错误是由 MySQL 数据库的 sql_mode 设置引起的,它限制了 GROUP BY 查询的使用。有几种方法可以解决这个问题:
1. 修改 MySQL 的配置文件,将 sql_mode 中的 only_full_group_by 移除。这需要在 MySQL 配置文件中进行修改,并且需要重启 MySQL 服务才能生效。
2. 在查询中使用聚合函数(例如 MAX、MIN、COUNT)对列进行处理,以满足 sql_mode 的要求。这可以通过修改 SQL 查询语句来实现,但可能需要更改查询的逻辑。
3. 升级到 MySQL 5.7.5 或更高版本,这些版本默认不包含 only_full_group_by。
需要注意的是,修改 sql_mode 可能会影响其他查询的执行,因此应该在进行任何更改之前进行充分的测试。
this is incompatible with sql_mode=only_full_group_by 解决
这个错误是因为 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;
```
这样就可以避免错误了。
阅读全文