2016-11-29 82 views
2

我有两个表。一个是事件另一个是。他们是这样的: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.* 
;