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 模式时应当谨慎,确保了解修改可能带来的影响。
评论区