[英]How do I produce a JSON document from PostgreSQL 1:n tables?
我有表“客戶”:
id name registered_on status
-- ------- ------------- ------
1 Alice 2020-03-04 a
2 Vincent 2020-03-05 p
3 Anne 2020-03-06 a
和表“帳戶”:
client_id account_number type balance
--------- -------------- ---- -------
1 300-1 CHK 100
2 307-5 SAV 24
2 307-6 CHK 350
我在DB Fiddle中創建了它們。
現在,我需要一個 SQL 查詢來生成 1:n JSON 文檔。
表格之間存在 1:n 的關系,並且某些客戶可能沒有帳戶(例如“Anne”):
[
{
"id":1,
"name":"Alice",
"registered_on":"2020-03-04",
"status":"a",
accounts: [
{
"account_number": "300-1",
"type": "CHK",
"balance": 100.00
}
]
},
{
"id":2,
"name":"Vincent",
"registered_on":"2020-03-05",
"status":"p",
accounts: [
{
"account_number": "307-5",
"type": "SAV",
"balance": 24
},
{
"account_number": "307-6",
"type": "CHK",
"balance": 350
}
]
},
{
"id":3,
"name":"Anne",
"registered_on":"2020-03-06",
"status":"a",
accounts: [ ]
}
]
結果是我知道該怎么做的簡單連接(可能是外部連接)。 我只是不知道如何從中生成 JSON 文檔。
我想client
表的列id
是主鍵。 要使用的關鍵函數是to_jsonb()
和jsonb_agg().
select jsonb_pretty(jsonb_agg(r))
from (
select
to_jsonb(c) || jsonb_build_object(
'accounts',
coalesce(nullif(jsonb_agg(to_jsonb(a)- 'client_id'), '[null]'), '[]')
) as r
from client c
left join account a on client_id = id
group by c.id
) s
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.