sql_mode=only_full_group_by 模式时,如何select *
时间: 2023-10-27 18:54:09 浏览: 72
在sql_mode=only_full_group_by模式下,如果你使用SELECT *,则必须确保SELECT语句中所有列都在GROUP BY子句中出现。如果有任何一个列未在GROUP BY子句中出现,则会抛出错误。因此,为了避免这种情况,建议明确列出所有需要查询的列,而不是使用SELECT *。这样可以确保查询结果的正确性,避免因为未在GROUP BY子句中的列导致的错误。
相关问题
什么是sql_mode=only_full_group_by模式?
sql_mode=only_full_group_by是MySQL数据库中的一个模式,它是用来控制GROUP BY语句的行为的。在这个模式下,当使用GROUP BY语句进行分组查询时,必须将SELECT列表中的非聚合列都包含在GROUP BY子句中。
具体来说,当启用only_full_group_by模式时,如果SELECT列表中包含了非聚合列而没有在GROUP BY子句中出现,MySQL会抛出错误,阻止查询的执行。这样做是为了确保查询结果的准确性,避免出现模糊或不确定的结果。
只有在sql_mode中设置了only_full_group_by模式,才会启用该模式。如果没有设置该模式,MySQL会使用默认的GROUP BY语义,允许SELECT列表中的非聚合列不出现在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 ]
阅读全文