Mysql 连接已连接ID的值

Mysql 连接已连接ID的值,mysql,Mysql,数据库:MySQL 我有两个表,一个用于用户分配的角色,另一个包含角色信息。我的问题是,分配的角色存储在单个字段中,由逗号分隔。我需要构建一个报告,该报告按名称而不是id列出角色,但仍然位于由列分隔的单个字段中 我认为GROUP_CONCAT可能是解决方案,但我看到它用于创建串联列表,而不是使用已经存在的列表 表1:用户 ID | FNAME | LNAME | ROLE_IDS ------------------------------------------ 1 | Bob |

数据库: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:角色

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

要获取引用角色名称,您可以像这样使用
GROUP\u 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

我已经在中进行了测试,工作正常。

您还需要保留订单吗?不,不一定。我想一旦我有了结果,如果需要的话,我可能会进行排序。我已经发布了我的答案。我发现了如何在组_CONCAT中排序结果并修改分隔符:组_CONCAT(不同的ro.ROLE_NAME order by ro.ROLE_NAME separator',')作为角色_NAME谢谢Akash!工作完美。