MySQL列出用户及其所属组

5
在 MySql 数据库中,我有一个名为 user 的表格。
user_id | user_name
--------+----------
1       | Joe
2       | Anna
3       | Max

表格 group

group_id | group_name
---------+----------
1        | Red
2        | Blue
3        | Green

表格 group_member

group_member_id | user_id | group_id
----------------+---------+---------
1               | 1       | 2
2               | 3       | 2
3               | 1       | 3 
3               | 2       | 1

那么...红组的成员是安娜,绿组的成员是乔,蓝组的成员是乔和马克斯。

我如何获取用户及其所在组的列表

User  | Group
------+------------
Joe   | Green, Blue
Anna  | Red
Max   | Blue 

组是一个关键字,请将表名“组”改为其他名称! - Suleman Ahmad
3个回答

7
你可以使用MySQL的GROUP_CONCAT函数来完成。需要注意的是,这样会使你的查询不可移植(因为使用了MySQL扩展)。
SELECT user_name, GROUP_CONCAT(group_name)
FROM user
JOIN group_member USING (user_id)
JOIN group USING (group_id)
GROUP BY
       user_id

我假设在表上有合理的主键/唯一键(例如,在同一组中,给定的用户名不会列出两次)。


1
注意 GROUP_CONCAT 函数的最大长度由 group_concat_max_len 定义。它默认为 1024,但可以更改。因此,如果您的数据看起来被截断了,那就是原因。 - Mike B
@MikeB:说得好。不过如果那成为一个问题,那么在应用程序代码中生成列表比在数据库中更好。 - Romain

0
select u.user_name as users, group_concat(g.group_name) as groups
from `user` u 
join group_member gm on gm.user_id = u.user_id
join `group` g on g.group_id = gm.group_id
group by u.user_id;

0
SELECT u.user_name, GROUP_CONCAT(g.group_name)
FROM `user` u
inner JOIN group_member gm on gm.user_id = u.user_id
inner JOIN `group` g on g.group_id = gm.group_id
group by u.user_id

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接