1 回答

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超10個(gè)贊
演示:db<>fiddle(本機(jī)查詢)
SELECT?
? ? json_agg(json_person)
FROM
? ? person p
JOIN (
? ? SELECT
? ? ? ? person_id,
? ? ? ? json_agg(json_contacts) AS contacts
? ? FROM
? ? ? ? contacts,
? ? ? ? json_build_object('key', key, 'value', value) as json_contacts
? ? GROUP BY person_id
) c
ON c.person_id = p.id,
json_build_object('id', p.id, 'name', p.name, 'contacts', c.contacts) AS json_person
文檔:Postgres JSON 函數(shù)
您必須使用創(chuàng)建一個(gè) JSON 對(duì)象json_build_object()
并將這些結(jié)果聚合到一個(gè)數(shù)組中json_agg()
。兩次。
免責(zé)聲明:如評(píng)論中所述:在這種情況下,兩個(gè)表的簡單 JOIN 就可以將邏輯傳輸?shù)?Java 后端。我猜,因?yàn)槟褂玫氖?JPA,所以您只有實(shí)體管理器中的數(shù)據(jù)。因此,使用 Java 工具(例如gson
)生成 JSON 對(duì)象將是比調(diào)用數(shù)據(jù)庫更好的選擇。但這當(dāng)然取決于您的用例和設(shè)置。
添加回答
舉報(bào)