2016-11-29 6 views
2

私は2つのテーブルを持っています。 1つはイベントで、もう1つはです。彼らは、次のようになります。postgreSQLは、レコードの結合と埋め込み配列

events   | data_type 
--------------------+----------- 
event_id   | integer 
start    | TIMESTAMP WITH TIME ZONE 
end    | TIMESTAMP WITH TIME ZONE 


people   | data_type 
--------------------+----------- 
people_id   | integer 
name    | TEXT 
event_id   | integer 

私はイベント情報のための単一のイベントを照会したいのですが、私はまた、イベントであることを行っている(人に結ば)ゲストのリストを取得したいと思います。

私は最終的にこの(JSONに変換)のようなルックスを探しています出力:

{ 
    "event_id": 1, 
    "start": Fri, 05 Aug 2016 21:18:38 GMT, 
    "end": Fri, 05 Aug 2016 21:18:38 GMT, 
    "guests": [ 
      {"name": "John", event_id: 1}, //record from people table 
      {"name": "Sarah", event_id: 1} 
    ] 
} 

は、どのように私はエレガントに私が持っているすべての関連する人々のレコードを取得することをPostgreSQLで参加を行うことができますか?私は右のあなたのアップ・テーブルを嘲笑

SELECT 
* 
FROM events, people 
WHERE events.event_id = people.event_id 
+0

あなたは持っているのPostgresのバージョン?.. –

+0

私は信じて最新ので、9.6.x – ApathyBear

+0

あなたは、両方のテーブルのDDLを取り込むことができますしてください?... –

答えて

1

わからない場合:

は、これまでのところ、私は次のクエリを持っています。これはトリックですか?

with events as (select * from events) 
    select jsonb_set(
    to_jsonb(events.*) 
    , '{guests}' 
    ,to_jsonb(array_agg(to_json(people)) 
) 
) 
from people 
join events on people.event_id = events.event_id 
group by events.* 
; 
関連する問題