目 录CONTENT

文章目录

MySQL分组查询模式

Jinty
2024-02-20 / 0 评论 / 0 点赞 / 19 阅读 / 1270 字

MySql this is incompatible with sql_mode=only_full_group_by 错误:

在 MySQL 中,如果你启用了 ONLY_FULL_GROUP_BY 模式,那么在使用 GROUP_CONCAT 函数时可能会遇到错误。这是因为在 ONLY_FULL_GROUP_BY 模式下,所有的非聚合列(没有在 GROUP BY 子句中的列)必须在聚合函数中使用或者在 SELECT 列表中进行聚合。

为了解决这个问题,你可以通过两种方式之一来处理:

1. 使用 ANY_VALUE 函数:在 MySQL 8.0 版本中,你可以使用 ANY_VALUE 函数来避免 ONLY_FULL_GROUP_BY 模式下的错误。例如:

SELECT class, GROUP_CONCAT(ANY_VALUE(name))
FROM students
GROUP BY class;

2. 调整 SQL 模式:另一种解决方法是调整 MySQL 的 SQL 模式,禁用 ONLY_FULL_GROUP_BY 模式。你可以在 MySQL 配置文件中修改 sql_mode 参数,或者在会话中使用 SET 命令来修改 SQL 模式。

 -- 关闭 session级
SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

-- 关闭 GLOBAL级
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
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';

请注意,在生产环境中修改 SQL 模式时应当谨慎,确保了解修改可能带来的影响。

0

评论区