首页 > 解决方案 > 如果 json_agg 什么也没找到,posgres 返回空行

问题描述

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

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

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

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

标签: sqlpostgresqlpostgresql-9.5

解决方案


似乎您需要使用左连接:

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

推荐阅读