本文共 1225 字,大约阅读时间需要 4 分钟。
在使用MySQL数据库时,可能会遇到以下错误信息:
expression #2 of SELECT list contains nonaggregated column 'newhelp.appr.title'; this is incompatible with sql_mode=only_full_group_by
MySQL从版本5.7开始,默认启用了ONLY_FULL_GROUP_BY
SQL模式。这一改进是为了更严格地遵循类似Oracle和DB2的处理方式,从而确保“分组求最值”操作的合法性。这种模式下,SELECT列表中不能包含不明确的字段。
ONLY_FULL_GROUP_BY模式的作用:
GROUP BY
时,SELECT列表中的字段是明确的且与GROUP BY
中的字段一致。简单来说,如果你的查询涉及到分组操作(如GROUP BY
),那么SELECT列表中的字段必须是明确的。具体来说,如果你试图在查询结果中同时显示多个不同的值(比如一组数据中的最大值、小写值等),那么字段必须是聚合函数的结果(如MAX(title)
, MIN(name)
等)。
要解决这个问题,可以采取以下措施:
检查查询是否需要分组操作:
GROUP BY
子句。如果不需要分组操作,可以直接删除GROUP BY
部分。GROUP BY
中的字段一致。调整SQL模式:
sql_mode
参数,将ONLY_FULL_GROUP_BY
参数设置为OFF
:SET sql_mode=OFF
ONLY_FULL_GROUP_BY
可能会导致其他潜在问题,因此这种方法应作为最后手段使用。查询合法性:
ONLY_FULL_GROUP_BY
模式下,所有查询都必须遵守“分组求最值”的合法性规则。COUNT
, AVG
等),请确保这些字段与GROUP BY
中的字段一致。数据库版本更新:
这个问题是MySQL 5.7+版本带来的一个重要变化。你需要根据具体需求调整查询逻辑或数据库配置,以确保查询的合法性。
转载地址:http://sxdfk.baihongyu.com/