mysql only_full_group_by
时间: 2023-06-05 21:47:33 浏览: 129
"mysql only_full_group_by"是MySQL的一种错误提示,意思是只有在全组(group by)的情况下才能执行聚合函数操作。出现该错误是因为SQL查询中使用了GROUP BY语句但没有按照所有列进行分组,或者SELECT语句中出现了非聚合列。解决该错误的方法是将所有列都放入GROUP BY语句中,或者使用聚合函数操作使非聚合列成为聚合列。
相关问题
mysql 禁用 ONLY_FULL_GROUP_BY,暂时解决错误(sql_mode=only_full_group_by)
在 MySQL 中,ONLY_FULL_GROUP_BY 是一种 SQL mode,它要求在 GROUP BY 子句中使用的字段必须在 SELECT 子句中出现,或者是聚合函数(如 COUNT、SUM 等)的参数。
如果你的 MySQL 服务器启用了 ONLY_FULL_GROUP_BY 模式,那么当你尝试执行一个违反这个规则的查询时,就会出现错误,提示 "Expression #N of SELECT list is not in GROUP BY clause and contains nonaggregated column"。
如果你确定你的查询逻辑不需要满足 ONLY_FULL_GROUP_BY 模式的要求,可以通过修改 sql_mode 参数来禁用这个模式。具体方法如下:
1. 使用 root 用户登录 MySQL 服务器。
2. 执行以下命令查看当前 sql_mode 参数的值:
```sql
SELECT @@sql_mode;
```
3. 复制查询结果中的值,备份一下原来的 sql_mode 参数值,以便需要时可以恢复。
4. 执行以下命令修改 sql_mode 参数,删除其中的 ONLY_FULL_GROUP_BY:
```sql
SET sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
```
注意:上面的命令中,只保留了 STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO 和 NO_ENGINE_SUBSTITUTION 这些参数,将 ONLY_FULL_GROUP_BY 参数删除了。
5. 再次执行以下命令查看当前 sql_mode 参数的值,确认是否已经成功移除了 ONLY_FULL_GROUP_BY:
```sql
SELECT @@sql_mode;
```
如果查询结果中已经不包含 ONLY_FULL_GROUP_BY 参数,那么说明修改成功。
注意:禁用 ONLY_FULL_GROUP_BY 模式可能会导致某些查询结果不正确,因此应该在确保没有影响到业务逻辑的情况下才进行修改。
关闭MySQL sql_mode=only_full_group_by
关闭MySQL的sql_mode=only_full_group_by可以通过以下方法实现:
1. 修改配置文件:
- 打开MySQL的配置文件my.cnf或my.ini(根据操作系统的不同,文件路径可能会有所不同)。
- 在[mysqld]下添加或修改以下行:
```
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
```
- 保存并关闭配置文件。
- 重启MySQL服务。
2. 临时修改会话:
- 打开MySQL客户端或命令行工具。
- 执行以下命令:
```sql
SET GLOBAL sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
```
- 重新连接到MySQL服务器。
请注意,以上方法中的sql_mode值是一个示例,你可以根据自己的需求进行修改。另外,修改配置文件需要重启MySQL服务,而临时修改会话只对当前会话有效。
阅读全文