在 mysql 中分组连接

Group concatinate in mysql

我正在尝试将我的角色名称组合起来

select 
    FirstName, 
    (
        select GROUP_CONCAT(distinct role.Name SEPARATOR ', ')
        from user_roles r 
        inner join users u ON u.Id = r.Userid 
        inner join roles role ON r.RoleId = role.Id
        where role.Active = 1 and role.IsDeleted = 0 and r.UserId = u.Id
    ) As rloleList 
from users;

我为所有用户获取了相同的角色名称。

您似乎想要聚合:

select 
    u.firstname, 
    group_concat(distinct r.name separator ', ') rolelist 
from user_roles ur 
inner join users u on u.id = ur.userid 
inner join roles r on r.id  = ur.roleid
where r.active = 1 and r.isdeleted = 0
group by u.id, u.firstname

我不确定您在 group_concat() 中是否需要 distinct;如果给定用户没有重复的角色(根据您的模式应该是这样),则只需删除它即可使查询更高效。

I'm trying to group concatenate my role names

基本思路是:

select u.UserId, u.firstname,
       group_concat(role_name separateor ', ') as roles
from user_roles ur inner join
     users u 
     on u.Id = ur.Userid inner join
     roles r 
     on r.RoleId = ur.Id
group by u.UserId, u.firstname;

在大多数数据库中,user_roles 不会有重复项,因此 group_concat() 中不需要 distinct。如果可能重复,则包括它。

你的查询有额外的过滤,你没有解释,所以我没有包括它们。您可以只添加 where 子句:

where r.Active = 1 and r.IsDeleted = 0

如果需要这些附加条件。