only_full_group_by限制order
时间: 2023-11-25 08:52:23 浏览: 35
根据提供的引用内容[1],可以得知only_full_group_by规则对于group by的限制,但是并没有直接提到对order by的限制。在MySQL中,如果开启了only_full_group_by模式,那么在使用group by时,select语句中的列必须是group by子句中的列或者是聚合函数,否则会报错。而对于order by,只要在select语句中的列都可以在order by中使用,不受only_full_group_by的限制。
相关问题
sql_mode=only_full_group_by
在MySQL 5.7版本后,默认开启了SQL_MODE严格模式,其中一个选项是sql_mode=only_full_group_by。这个模式要求在进行group by聚合操作时,select语句中的列只能是出现在group by中的列或者使用聚合函数(如max()、min()等)。如果不符合这个规则,就会报错。
为了解决这个问题,你可以按照下面的方法进行操作:
1. 在MySQL配置文件中的[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'。这样可以将sql_mode的设置更改为允许使用所有的模式,包括only_full_group_by。
2. 修改你的SQL语句,确保select中的列要么是出现在group by中的列,要么是使用了聚合函数。例如,你可以修改你的SQL语句为:select uid from user_order group by uid; 这样就不会再报错了。
3. 如果你不想修改MySQL的全局配置,你可以在每个需要执行的SQL语句前加上SET sql_mode='';来临时关闭严格模式。这样在执行完这个语句后,严格模式就会恢复。但这种方法并不推荐,因为可能会导致其他的潜在问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [MySQL提示sql_mode=only_full_group_by解决办法](https://blog.csdn.net/M__L__/article/details/126806559)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which 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 语句中必须包含所有非聚合的列,否则会报错。
解决方法之一是在查询前先执行以下命令:
```
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
```
这样会临时关闭 only_full_group_by 模式。
另外,也可以通过修改 MySQL 的配置文件,永久关闭 only_full_group_by 模式。具体操作是:
1. 找到 MySQL 的配置文件 my.cnf 或者 my.ini。
2. 找到 [mysqld] 部分,在其中添加以下语句:
```
sql_mode=NO_ENGINE_SUBSTITUTION
```
3. 保存文件并重启 MySQL 服务。
这样就可以永久关闭 only_full_group_by 模式了。