如何用MySQL JOIN+GROUP_CONCAT实现用户组ID的聚合关联查询?
解决方案
你可以使用MySQL的GROUP_CONCAT()函数实现将同一用户的组ID拼接为逗号分隔的字符串,结合LEFT JOIN确保所有用户都被包含(即使没有所属组的用户也会显示,组ID字段为NULL):
SELECT u.id, u.email, GROUP_CONCAT(gu.group_id SEPARATOR ',') AS group_ids FROM users u LEFT JOIN group_user gu ON u.id = gu.user_id GROUP BY u.id, u.email;
关键说明:
GROUP_CONCAT(gu.group_id SEPARATOR ','):将每个用户对应的所有group_id值用逗号连接成一个字符串,SEPARATOR ','可省略,逗号是默认分隔符。LEFT JOIN:保留users表中的所有记录,若用户在group_user表中无对应数据,group_ids会返回NULL。GROUP BY u.id, u.email:按用户的唯一标识id和email分组,确保每个用户仅返回一行结果。
执行该查询后,会得到符合预期的结果:
| id | group_ids | |
|---|---|---|
| 1 | email_1@test.com | 1 |
| 2 | email_2@test.com | 1,5,6 |
| 3 | email_3@test.com | 5,6 |
| 4 | email_4@test.com | 1 |
| 5 | email_5@test.com | 5 |
内容的提问来源于stack exchange,提问作者silverrulezz
相关产品推荐
相关产品推荐

