You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LEFT JOIN多表分组查询触发#1055错误,求解决方案

解决MySQL GROUP BY报错 #1055的方案

错误原因

你遇到的#1055错误是因为MySQL开启了sql_mode=only_full_group_by模式,该模式要求:SELECT列表中的所有非聚合(未用SUM/MAX等函数包裹)的列,必须出现在GROUP BY子句中,或者与GROUP BY中的列存在函数依赖关系。

你的原SQL中,GROUP BY u.id,但SELECT里的p.id既不在GROUP BY里,又不与u.id函数依赖(一个users可能对应多个pupils记录),因此触发错误。


解决方案

根据你的业务需求,选择以下两种修改方式之一:

1. 若一个用户对应多个学生:用聚合函数处理p.id

如果一个用户可能有多个关联的学生记录,你需要明确如何选取p.id(比如取最大/最小ID),用聚合函数包裹p.id:

SELECT u.id, u.name, u.surname, MAX(p.id) as p_id, SUM(t.summa)
FROM users u
LEFT JOIN pupils p ON p.userid = u.id
LEFT JOIN tulovlar t ON t.pupilid = p.id
WHERE u.turi = 3
GROUP BY u.id, u.name, u.surname
ORDER BY u.surname

注:由于u.id是users表的主键,u.name和u.surname天然依赖于u.id,部分MySQL版本允许只写GROUP BY u.id,但加上u.name, u.surname能提升兼容性。

2. 若一个用户仅对应一个学生:将p.id加入GROUP BY

如果pupils.userid是唯一键(每个用户仅对应一个学生),可以直接把p.id加入GROUP BY子句:

SELECT u.id, u.name, u.surname, p.id as p_id, SUM(t.summa)
FROM users u
LEFT JOIN pupils p ON p.userid = u.id
LEFT JOIN tulovlar t ON t.pupilid = p.id
WHERE u.turi = 3
GROUP BY u.id, u.name, u.surname, p.id
ORDER BY u.surname

内容的提问来源于stack exchange,提问作者Zokhid Juraev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 11:20:55