合并两个联接表并输出为 JSON?

Merging two joined tables and output as JSON?

我想要 SELECT 个实体和一个 uploads JSON 包含所有上传内容的数组列,以及 coverprofile 字段每次上传。

到目前为止,我可以获得上传的数组,但是我无法从 entitiesXuploads table.

添加另外两个字段

我的三个tables的基本表示如下:

Entities

Uploads

entitiesXuploads

我的查询:

SELECT
    e.id,
    e.name,
    COALESCE(jsonb_agg(up) FILTER (WHERE up."id" IS NOT NULL), '[]') as uploads

FROM 
    entities as e
    LEFT JOIN "entitiesXuploads" as exu ON exu."entityId" = e."id"
    LEFT JOIN "uploads" as up ON up."id" = exu."uploadId"

GROUP BY
    e.id,
    e.name

其中 returns 行:

demo: db<>fiddle

SELECT 
    e.id,
    e.name,
    jsonb_agg(
        jsonb_build_object(
            'upload_id', upload_id, 
            'title', title, 
            'versions', versions,
            'cover', cover,
            'profile', profile
        )
    ) AS uploads
FROM
    entities e
JOIN entities_uploads eu ON e.id = eu.entity_id
JOIN uploads u ON eu.upload_id = u.id
GROUP BY e.id, e.name

您可以使用 jsonb_build_object() 为每条记录创建您期望的对象。之后,您可以使用 jsonb_agg() 聚合函数对记录进行分组,将这些对象合并到一个数组中。