我有以下查询
select r.role_id,
r.role_name,
p.permission_name
from t_user_role ur, t_role r, t_role_permission rp, t_permission p
where ur.role_id=r.role_id
and ur.role_id=rp.role_id
and rp.permission_id=p.permission_id
and ur.contact_id=505;
给了我以下结果
我想将具有相似行ID的行分组,以获得如下结果:
ROLE_ID ROLE_NAME PERMISSION_NAME
100 ops_center List Dashboard
106 oc_public RunETN Activity Detail | Run Test View | .... and so on
请帮助
答案 0 :(得分:2)
根据您在下面的陈述,我假设您使用的是MySQL并尝试使用GROUP_CONCAT()
:
我尝试过使用群组联系人,但我无法进行查询。
如果您使用的是MySQL,那么您将应用GROUP_CONCAT()
,如下所示:
select r.role_id,
r.role_name,
group_concat(p.permission_name separator ' | ') permission_name
from t_user_role ur
inner join t_role r
on ur.role_id=r.role_id
inner join t_role_permission rp
on ur.role_id=rp.role_id
inner join t_permission p
on rp.permission_id=p.permission_id
where ur.contact_id=505
group by r.role_id, r.role_name;
注意:我更改了查询以使用ANSI JOIN语法而不是以逗号分隔的表列表
在Oracle 11g中,您可以使用LISTAGG()
:
select r.role_id,
r.role_name,
LISTAGG(p.permission_name, ' | ') WITHIN GROUP (ORDER BY r.role_id) permission_name
from t_user_role ur
inner join t_role r
on ur.role_id=r.role_id
inner join t_role_permission rp
on ur.role_id=rp.role_id
inner join t_permission p
on rp.permission_id=p.permission_id
where ur.contact_id=505
group by r.role_id, r.role_name;