簡體   English   中英

Postgres結果多維查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM