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()

Group Contactを使用してみましたが、クエリを実行できません

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;

注:テーブルのコンマ区切りリストの代わりにANSIJOIN構文を使用するようにクエリを変更しました

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 に答える