选择使用其他查询的结果作为JSON创建列

我正在尝试创建一个查询,该查询将从表parties中获取结果。该表包含两个外键,我在“映射”这些外键时遇到了麻烦。 对于第一个外键,我需要将我的host_id列映射到人users.name的实际姓名。

我能够通过以下方式解决此问题:

SELECT parties.*,users.name as host_name
FROM parties 
INNER JOIN users ON parties.host_id = users.id

我的第二个外键是一个名为guests的表,该表具有一个名为party_refer的FK,该表引用了parties.id

以下查询将我的来宾作为结果的一部分(通过在结果中附加我的所有来宾表列)

SELECT parties.*,users.name as host_name,guests.*
FROM parties 
INNER JOIN users ON parties.host_id = users.id
INNER JOIN guests ON parties.id = guests.party_refer

我想修改第二个INNER JOIN,以便将(select * from guests)的结果作为称为Guests的单个列返回,并将结果表示为JSON。

我相信我需要使用array_to_json(array_agg(row_to_json())),但是我已经尝试了好几个小时才能让它运气好。

uxxi198549 回答:选择使用其他查询的结果作为JSON创建列

我认为您正在寻找

SELECT parties.*,users.name as host_name,json_agg(row_to_json(guests)) as guests
FROM parties 
INNER JOIN users ON parties.host_id = users.id
INNER JOIN guests ON parties.id = guests.party_refer
GROUP BY parties.id,users.name

尽管子查询可能比扩展分组更简单:

SELECT
  parties.*,(SELECT json_agg(row_to_json(guests))
    FROM guests
    WHERE guests.party_refer = parties.id) as guests
FROM parties 
INNER JOIN users ON parties.host_id = users.id

online demo

例如,您可能希望使用显式json_build_object而不是row_to_json

json_agg(json_build_object('guestName',guests.name))
本文链接:https://www.f2er.com/3170081.html

大家都在问