postgres returns 空行如果 json_agg 没有找到任何东西

posgres returns empty rows if json_agg doesn' find nothing

大家好,我在使用 json_agg

时遇到了问题

我有两个 tables:文档和 subs 看起来像这样

Docs(
id primary key,
title,
name,
code
)
Subs(
id primary key,
title,
name,
code,
idoc fk
)

我使用这个查询来检索它们

SELECT *,s.subdocs FROM docs d INNER JOIN(
    SELECT idoc,json_agg(
        json_build_object(
        'id',id,'title',title,'name',name,'code',code,
    )) AS subdocs FROM subs GROUP BY subs.idoc
    ) AS s ON s.idoc = d.idoc
 WHERE d.id = 4

当有与文档关联的子文档时,它似乎可以工作,但是当没有查询时,查询不会 return 任何东西所以我如何检查 json 的结果agg 是空的并且 return 至少文档的字段 table?

看来您需要使用左连接:

SELECT *,s.subdocs FROM docs d 
LEFT JOIN (
    SELECT idoc,json_agg(json_build_object('id',id,'title',title,'name',name,'code',code)) AS subdocs 
    FROM subs GROUP BY subs.idoc
    ) AS s ON s.idoc = d.idoc
 WHERE d.id = 4