如果 json_agg 什么也没找到,posgres 将返回空行

问题描述

大家好,我在使用 json_agg 时遇到了问题

我有两个表:看起来像这样的文档和子表

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

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

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

当有一个与该文档关联的子文档时它似乎工作,但当没有时查询不返回任何内容,所以我如何检查 json agg 的结果是否为空并至少返回字段文档表?

解决方法

似乎您需要使用左连接:

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