在 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
如果需要这些附加条件。
我正在尝试将我的角色名称组合起来
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
如果需要这些附加条件。