SQL3表连接

SQL3表连接,sql,mariadb,Sql,Mariadb,假设我有3个表(role、user和user_has_role),其中 3个表之间的公共列是id。问题是 每个用户名可以有多个角色,我想加入他们 关于id,但当用户名有超过1行时,我 希望这些角色在同一行中用逗号分隔,而不是 例如,有两行具有相同id、相同用户名但不同 角色,不,我希望在一行中有一个id、一个用户名和 多重角色 我的表格如下: User: id username 1 jack

假设我有3个表(role、user和user_has_role),其中 3个表之间的公共列是id。问题是 每个用户名可以有多个角色,我想加入他们 关于id,但当用户名有超过1行时,我 希望这些角色在同一行中用逗号分隔,而不是 例如,有两行具有相同id、相同用户名但不同 角色,不,我希望在一行中有一个id、一个用户名和 多重角色

我的表格如下:

User:

    id    username                              
    1     jack                           
    3     john

Role:

    id    role                          
    1     23 
    2     22                            
    3     33                            
    3     35 


user_has_role:

    user_id  role_id
    1        1
    1        2
    2        3
我希望结果是这样的:

    id    username    roles
    1     jack        23,22
    2     john        33

您可以按如下方式使用
group\u concat

select u.id as user_id,
       u.username,
       group_concat(r.role_id ORDER BY r.role_id SEPARATOR ',') as roles
  from user u join user_has_role r on r.user_id = u.id
group by u.id, u.username

那么,你试过什么?你有一些SQL可以添加给我们检查吗?您遇到了什么问题?@Russ我尝试了这个选择u.id作为uid、用户名、用户角色u内部加入用户\u拥有\u角色uhr ON u.id=uhr.user\u id内部加入角色r ON r.id=uhr.role\u id ORDER BY 2请用您正在使用的数据库标记您的问题。如果您用您正在使用的数据库标记您的问题,我们可以提供更好的答案(因为FOR XML功能),我相信我不能这样做,因为它是一个巨大的数据库,无法上传,但我会说(一个人可以有多个角色,我如何能够在单个单元格中收集所有角色,而不重复整行?),这意味着我需要id,用户名和整个角色都在一行中。谢谢,它可以工作,但还有最后一件事,在表角色中,我有角色和id(它是角色id),我希望角色作为一个名称显示,而不是它的idgroup_concat(r.role_name ORDER BY r.role_name SEPARATOR’,'),因为RoleShare有一个问题,我在它不工作之前尝试过,角色表中的列也被称为“role”而且没有和role_name@popeye合作