dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
时间: 2023-10-12 19:18:01 浏览: 78
这个错误通常是因为 MySQL 的版本较高,启用了 `only_full_group_by` sql_mode 模式,该模式要求 GROUP BY 语句中的每个列都必须在 SELECT 列表中出现,或者是聚合函数的参数。
这种情况下,如果你使用了一个不符合要求的 GROUP BY 语句,就会出现这个错误。
解决方法有两种:
1. 修改 sql_mode 模式
你可以通过修改 MySQL 的配置文件,将 sql_mode 中的 `ONLY_FULL_GROUP_BY` 移除掉。这样,MySQL 就不会检查 GROUP BY 列表中的每个列是否在 SELECT 列表中出现了。
2. 修改查询语句
你可以修改查询语句,确保 GROUP BY 列表中的每个列都在 SELECT 列表中出现,或者是聚合函数的参数。例如:
```sql
SELECT column1, SUM(column2)
FROM table1
GROUP BY column1
```
注意,这里的查询语句中,`column1` 在 GROUP BY 列表中出现了,并且在 SELECT 列表中也出现了,而 `column2` 在 SELECT 列表中没有出现,但是它作为 SUM 函数的参数出现了,因此也是合法的。
相关问题
functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
这个错误是由于MySQL的sql_mode设置为only_full_group_by导致的。在MySQL 5.7.5之后,sql_mode默认启用了ONLY_FULL_GROUP_BY模式,它要求GROUP BY子句中的每个列都必须是聚合函数或GROUP BY子句中的列。如果SELECT列表中包含GROUP BY子句中未列出的列,则会出现“not functionally dependent on columns in GROUP BY clause”错误。解决此问题的方法是将sql_mode设置为非ONLY_FULL_GROUP_BY模式,或者将SELECT列表中的列添加到GROUP BY子句中。以下是两种解决方法:
1.将sql_mode设置为非ONLY_FULL_GROUP_BY模式
```sql
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
```
2.将SELECT列表中的列添加到GROUP BY子句中
```sql
SELECT id AS id,uid,rid FROM sys_user_role WHERE (rid = '1259293401992036353') GROUP BY uid, id;
```
is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
这个错误提示是由MySQL数据库引擎的严格模式(sql_mode=only_full_group_by)导致的。它表示在GROUP BY子句中的列不是函数依赖的,这与严格模式不兼容。
在MySQL的严格模式下,当使用GROUP BY子句进行分组查询时,SELECT语句中的列必须满足以下两个条件之一:
1. 在GROUP BY子句中明确列出;
2. 是聚合函数(如SUM、COUNT、MAX等)的参数。
如果SELECT语句中的列既不在GROUP BY子句中,也不是聚合函数的参数,那么就会出现这个错误。
为了解决这个问题,你可以采取以下几种方法之一:
1. 将SELECT语句中的列添加到GROUP BY子句中;
2. 将SELECT语句中的列改为聚合函数的参数;
3. 修改MySQL的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';
阅读全文