0

我有以下查询

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

请帮忙

4

1 回答 1

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;
于 2012-11-23T12:02:29.513 回答