[英]Postgres Result Multidimensional from Query
如何從單個Postgres查詢創建多維數組。
我有3個表格,其中包含以下各列:
tb_school(id,school_name)例如:
[ {id:"1", school_name:"School1"}, {id:"2", school_name:"School2"} ]
tb_profile(id,profile_name,school_id),例如:
[ {id:"1", profile_name:"John", school_id:"1"}, {id:"2", profile_name:"Peter", school_id:"1"}, {id:"3", profile_name:"Sam", school_id:"1"}, {id:"4", profile_name:"Susan", school_id:"2"}, {id:"5", profile_name:"Jude", school_id:"2"}, {id:"6", profile_name:"Kim", school_id:"2"} ]
tb_article(id,article_name,profile_id),例如:
[ {id:"1", article_name:"Headline News", profile_id:"1"}, {id:"2", article_name:"Sports Recap", profile_id:"2"}, {id:"3", article_name:"Weather", profile_id:"3"}, {id:"4", article_name:"Arts", profile_id:"4"}, {id:"5", article_name:"Other", profile_id:"5"}, {id:"6", article_name:"Example", profile_id:"6"} ]
我希望查詢返回結果緯度看起來像這樣:
[
{school_name:"School1", people:[
{profile_name:"John", articles:[
article_name:"Headline News"
]},
{profile_name:"Peter", articles:[
article_name:"Sports Recap"
]},
{profile_name:"Sam", articles:[
article_name:"Weather"
]},
]},
{school_name:"School2", people:[
{profile_name:"Susan", articles:[
article_name:"Arts"
]},
{profile_name:"Jude", articles:[
article_name:"Other"
]},
{profile_name:"Kim", articles:[
article_name:"Example"
]},
]}
]
我知道可以通過嵌套for循環中的3個獨立的選擇查詢來實現此目的。 我想知道的是,可以通過一個單一的postgres查詢來實現嗎?
注意:我對PostgreSQL不好。 可能做出錯誤的假設,並且代碼可能不適用於生產。
我幾乎可以肯定,您不能僅得出嵌套對象。 但是您可以接收JSON。 所以
SELECT json_build_object( 'school_name', school_name, 'people', ( SELECT json_agg(json_build_object( 'profile_name', profile_name, 'articles', ( SELECT json_agg(json_build_object( 'article_name', article_name )) FROM tb_article WHERE profile_id = tb_profile.facid ) )) FROM tb_profile WHERE school_id = tb_school.id ) ) AS result FROM tb_school
它將以JSON.parse
。
如果您想測試,可以使用此學習服務 。 我在這段代碼中使用了它。
SELECT json_build_object( 'name', firstname, 'slots', ( SELECT json_agg(json_build_object( 'number', slots, 'facility', ( SELECT json_agg(json_build_object( 'name', name )) FROM cd.facilities WHERE facid = cd.bookings.facid ) )) FROM cd.bookings WHERE memid = cd.members.memid ) ) AS result FROM cd.members
這可能會有所幫助或提供更多想法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.