连接连接ID的值

时间:2017-03-15 21:01:14

标签: mysql

数据库:MySQL

我有两个表,一个用于用户分配的角色,另一个用于包含角色信息。我的问题是分配的角色存储在一个字段中,以逗号分隔。我需要构建一个报告,按名称列出角色,而不是id,但仍然在列中的单个字段中。

我认为GROUP_CONCAT可能是解决方案,但我已经看到它用于创建连锁列表,而不是使用已存在的列表。

表1:用户

ID  | FNAME | LNAME | ROLE_IDS
------------------------------------------
1   | Bob   | Jones | 445,44,45,449,459
2   | Mark  | Doe   | 426,459,445
3   | Jeff  | Apple | 444,45

表2:ROLES

ID  | ROLE_NAME
------------------------------------
4   | Basic
13  | Reporting
16  | Advanced
44  | Admin
45  | Super User
426 | Accounting
444 | User
445 | Receivables
449 | Processing
459 | Research

预期查询结果:

ID  | FNAME | LNAME | ROLES
-------------------------------------------
1   | Bob   | Jones | Receivables, Admin, Super User, Processing, Research
2   | Mark  | Doe   | Accounting, Research, Receivables
3   | Jeff  | Apple | User, Super User

1 个答案:

答案 0 :(得分:0)

要获取引用角色名称,您可以使用GROUP_CONCAT,如下所示:

SELECT  us.ID,us.FNAME,us.LNAME,
        GROUP_CONCAT(ro.ROLE_NAME) ROLES_NAME
FROM    USERS us
        INNER JOIN ROLES ro
            ON FIND_IN_SET(ro.ID, us.ROLE_IDS) > 0
GROUP   BY us.ID

我已经在SQLFIDDLE进行了测试并且工作正常。