2017-07-11 2 views
1

pgsqlに新しいものがありますが、私が探しているのは共通のニーズですが、解決策を見つけることができませんでした。
ユーザーPostgreSQL:配列に集約して結合する

user_id|username|password 
-------|--------|-------- 
    1 | guest | blabla 
    2 | admin | blabla 

役割

role_id|name | descr 
-------|-----|-------- 
    1 |role1|role one 
    2 |role2|role two 

user_roles

user_id|role_id 
-------|------- 
    2 | 1 
    2 | 2 

は、私は3つのテーブルを持っています

が、私はそのすべての役割とともに、ユーザのテーブルを表示したい、私の推測では、(私を修正して自由に感じる)、それを行うための方法は次のようになります。配列に

  1. グループのユーザーの役割:
    select user_id,array_agg(role_id) from user_roles group by user_id where user_id = 2;
  2. 何とかarray_agg(role_id)の配列をrolesに結合して役割名を選択します。

ご覧のとおり、#2の操作方法はちょっと混乱しています。これは私が欲しいことをする最善の方法ですか? dbテーブルを構築する方法に何か問題がありますか?

ありがとうございます!

答えて

1

クエリを実行するには、最初にテーブル間の結合を行い、最後にname列に集計します。それは私が望んでいたまさにusingstring_agg(r.name,',')

select ur.user_id,array_agg(r.name) 
from user_roles ur, 
    roles r 
where ur.role_id = r.role_id 
and ur.user_id = 2 
group by ur.user_id; 
+0

、おかげできれいであってもよいこと 注意! –

関連する問題