2

我在 MySQL 中有三个不同的表:

给定一个用户 ID,我如何获取该用户的角色名称列表?例如 user_id = 1 我需要这样的列表 (1, deleteuser, modifyuser, viewuser)

如何构造我的 SQL 命令来获取这样的列表?

4

3 回答 3

2

JOIN这三个表是这样的:

SELECT 
  u.id,
  r.Name
FROM user u
INNER JOIN user_role ur ON u.id = ur.user_id
INNER JOIN roles r ON ur.Role_id = r.id
WHERE u.id = Someid

但是,如果您希望将每个用户的角色列表连接成一个字符串。GROUP_CONCAT像这样使用:

SELECT 
  u.id,
  GROUP_CONCAT(r.Name) roles
FROM user u
INNER JOIN user_role ur ON u.id = ur.user_id
INNER JOIN role r ON ur.Role_id = r.id
WHERE u.id = 1
GROUP BY u.id

SQL 小提琴演示

于 2012-11-08T07:42:08.190 回答
1
SELECT User_id, Name
FROM User_role
JOIN Role ON User_role.Role_id = Role.Id
WHERE User_id = '1'

这将创建一个这样的列表:

User_id | Name
1       | DeleteUser
1       | ModifyUser
1       | ViewUser
于 2012-11-08T07:42:08.540 回答
0

试试这个:

SELECT User_id, GROUP_CONCAT(r.Name)
FROM User_Role ur 
INNER JOIN Role r ON ur.Role_id = r.Role_id 
GROUP BY User_id;
于 2012-11-08T07:51:16.230 回答