我在用户和角色表之间有很多关系(一个典型的用例)。它们通过 user_role 表关联在一起。我执行以下查询:
select
u.id, u.first_name, u.last_name, u.middle_name,
u.email_address, r.id, r.role_code
from
master.user u
left join
master.user_role ur
on ur.user_id = u.id
and ur.is_void = false
left join
master.role r
on r.id = ur.role_id
and r.is_void = false
where u.id = 7 and u.is_void = false
此结果
7;"Multi Role";"First";"Middle";"mult@gmail.com";1;"ST"
7;"Multi Role";"First";"Middle";"mult@gmail.com";2;"TC"
我如何将角色聚合到一个json或数组列中,以使其结果为:
7;"Multi Role";"First";"Middle";"mult@gmail.com";[{id: 1, role_code : ST}, {id: 2, role_code: TC}]
答案 0 :(得分:2)
SELECT
id,
first_name,
last_name,
middle_name,
email_address,
jsonb_agg(
jsonb_build_object('id', r_id, 'role_code', role_code)
)
FROM
result_table
GROUP BY id, first_name, last_name, middle_name, email_address
jsonb_build_object
,Postgres JSON functions jsonb_agg
,Postgres aggregate functions 当然,您也可以使用类型json
代替jsonb
; Postgres JSON types