SQL多表关联查询:添加用户邮箱字段时GROUP BY报错的解决方法
解决方案
看你需要的结果,核心是获取每个挑战的创建者邮箱,而非参与者邮箱,所以无需关联记录用户参与关系的user_challenge表,直接通过challenge表的user_id关联users表就能得到目标结果,同时避免分组报错:
SELECT c.id, c.title, u.user_email FROM challenge AS c JOIN users AS u ON c.user_id = u.id;
原查询报错原因
你原查询用GROUP BY c.Id, c.title统计参与人数,当加入u.email后,SQL标准要求SELECT中的非聚合字段必须全部出现在GROUP BY子句中——同一个挑战可能对应多个参与者的邮箱,数据库无法自动确定返回哪一个,因此抛出错误。
而你要的结果里,邮箱是挑战创建者的信息(对应challenge.user_id关联的用户),和参与者无关,因此完全不需要分组操作,直接关联两张表即可。
如果你的实际需求是获取每个挑战的所有参与者邮箱(比如挑战23要返回两个邮箱),可以用聚合函数合并结果,以SQL Server为例:
SELECT c.id, c.title, STRING_AGG(u.user_email, ', ') AS participant_emails FROM challenge AS c JOIN user_challenge AS uc ON c.id = uc.challenge_id JOIN users AS u ON uc.user_id = u.id GROUP BY c.id, c.title;
内容的提问来源于stack exchange,提问作者3bodka
相关产品推荐
相关产品推荐

