赞
踩
– 禁用会话级别的 ONLY_FULL_GROUP_BY SET SESSION sql_mode = ‘’;
– 或者禁用全局级别的 ONLY_FULL_GROUP_BY SET GLOBAL sql_mode = ‘’;
在 MySQL 中,sql_mode
是一个服务器变量,用于定义 SQL 语句的运行模式。ONLY_FULL_GROUP_BY
是 sql_mode
中的一个选项,它影响 SQL 查询中 GROUP BY
子句的行为。
当 sql_mode
包含 ONLY_FULL_GROUP_BY
时,MySQL 强制要求:
SELECT
语句中使用 GROUP BY
子句时,所有非聚合的 SELECT
列表中的列必须在 GROUP BY
子句中明确指定。GROUP BY
子句中出现的列。这种模式的主要目的是避免因不明确的聚合而产生的歧义或错误。
如果你发现你的 SQL 查询因为 ONLY_FULL_GROUP_BY
而失败,你可以采取以下方法解决:
修改 SELECT
语句:
SELECT
列表中的列都在 GROUP BY
子句中明确指定。禁用 ONLY_FULL_GROUP_BY
:
ONLY_FULL_GROUP_BY
。ONLY_FULL_GROUP_BY
SET SESSION sql_mode = '';
这条命令会将当前会话的 sql_mode
设置为空,从而禁用 ONLY_FULL_GROUP_BY
。
ONLY_FULL_GROUP_BY
SET GLOBAL sql_mode = '';
这条命令会将全局的 sql_mode
设置为空,从而禁用 ONLY_FULL_GROUP_BY
。注意,这种更改是永久性的,直到下一次更改。
SET SESSION
:这个命令只影响当前会话。如果你关闭并重新打开连接,更改将不再有效。SET GLOBAL
:这个命令影响所有新的和现有的连接。更改是永久性的,直到下一次更改。假设你有以下 SQL 查询:
SELECT department, COUNT(*)
FROM employees
GROUP BY department;
如果 sql_mode
包含 ONLY_FULL_GROUP_BY
,这条查询是有效的,因为 department
列在 GROUP BY
子句中。
但是,如果你尝试执行以下查询:
SELECT department, COUNT(*), manager
FROM employees
GROUP BY department;
这条查询将失败,因为 manager
列没有在 GROUP BY
子句中。
为了使这条查询有效,你可以:
manager
列添加到 GROUP BY
子句中。ONLY_FULL_GROUP_BY
。通过禁用 ONLY_FULL_GROUP_BY
,你可以避免这些限制,但请确保这样做不会导致数据的歧义或错误。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。