1055: Expression not in GROUP BY (only_full_group_by)(表达式不在 GROUP BY 中)
MySQL含义
在 SELECT 列表或 HAVING/ORDER BY 中使用了既不在 GROUP BY 中、也未包裹在聚合函数中的列。由于启用了 ONLY_FULL_GROUP_BY SQL 模式,MySQL 拒绝这种不确定的表达式。
原因
查询直接选择了分组列之外的列,但该列在每个组中可能不止一个值。MySQL 5.7+ 默认启用 ONLY_FULL_GROUP_BY;依赖旧的宽松 GROUP BY 行为的查询会引发此错误。
解决方法
将该列加入 GROUP BY 列表,或将其包裹在聚合函数中(MAX()、MIN()、ANY_VALUE())。如果您确定该值在组内确实唯一,ANY_VALUE() 可以有意地消除歧义。禁用该模式(从 sql_mode 中移除 ONLY_FULL_GROUP_BY)而不修正查询,会重新带来结果错误的风险;应避免这样做。
同一数据库的其他条目
- 1553Cannot drop index needed in a foreign key constraint(无法删除外键约束所需的索引)
- 3948Loading local data is disabled; this must be enabled on both the client and server sides(加载本地数据已禁用;必须在客户端和服务器端同时启用)
- 1075Incorrect table definition; there can be only one auto column and it must be defined as a key(表定义不正确;只能有一个自增列,且必须将其定义为键)
- 1267Illegal mix of collations(非法的排序规则混用)
- 1030Got error N from storage engine(从存储引擎收到错误 N)
- 1197Multi-statement transaction required more than 'max_binlog_cache_size'(多语句事务所需空间超过了 'max_binlog_cache_size')
- 1785Statement violates GTID consistency(语句违反 GTID 一致性)