sql - 如果 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 的结果是否为空并至少返回文档的字段桌子?
解决方案
似乎您需要使用左连接:
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
推荐阅读
- r - 在 R 闪亮数据表中添加和删除行时出现问题
- amazon-web-services - 为什么 RDS 只读副本需要为源 DB 开启自动备份?
- java - TabLayout:如何从第二个选项卡开始?
- javascript - 在直接单击时突出显示 jquery ui datepicker 日历上的多个日期可以正常工作,但在由外部按钮触发时则不行
- python-3.x - 错误:psycopg2 的构建轮失败 - MacOS Mojave 10.14.16 python 3
- apache-spark - spark_apply 适用于一个数据集,但在另一个数据集上失败(两个数据集的类型和结构相同)
- mysql - Oracle 等效于 useServerPrepStmts=false & rewriteBatchedStatements=true
- excel - Workbooks.open 不返回任何内容
- visual-studio-code - VSCode 将打开的工作区列表存储在哪里?
- python - 将字典值转换为新字典