sql - Postgres jsonb_build_object 为空行返回空而不是空
问题描述
我正在尝试使用 Postgres 创建 JSON 输出。
我接近我认为的解决方案。
SELECT D.PROJECT_ID,
D.M_NAME,
D.M_ID,
JSON_AGG(D.TASK) AS TASKS
FROM
(SELECT MILESTONES.ID AS M_ID,
MILESTONES.NAME AS M_NAME,
MILESTONES.DUE_DATE,
PROJECT_ID,
TASK
FROM MILESTONES_TABLE MILESTONES
LEFT JOIN
(SELECT JSONB_BUILD_OBJECT('name',
ASSIGNMENTS.NAME,
'instructions',
INSTRUCTIONS,
'id',
ASSIGNMENTS.ID) AS TASK,
MILESTONE_ID
FROM ASSIGNMENTS) AS F ON MILESTONE_ID = MILESTONES.ID
WHERE MILESTONES.PROJECT_ID = 270 ) AS D
GROUP BY D.PROJECT_ID,
D.M_NAME,
D.M_ID
解决方案
我找到了解决方案。
我希望它可以帮助其他人。
SELECT D.PROJECT_ID,
D.M_NAME,
D.M_ID,
count(d),
COALESCE(NULLIF(json_agg(TASK)::TEXT, '[null]'), '[]')::JSON
FROM
(SELECT MILESTONES.ID AS M_ID,
MILESTONES.NAME AS M_NAME,
MILESTONES.DUE_DATE,
PROJECT_ID,
TASK
FROM MILESTONES_TABLE MILESTONES
LEFT JOIN
(SELECT case when count(ASSIGNMENTS.ID) = 0 then '[]' else JSONB_BUILD_OBJECT('name',
ASSIGNMENTS.NAME,
'instructions',
INSTRUCTIONS,
'id',
ASSIGNMENTS.ID) END AS TASK,
MILESTONE_ID
FROM ASSIGNMENTS GROUP BY ASSIGNMENTS.ID) AS F ON MILESTONE_ID = MILESTONES.ID
WHERE MILESTONES.PROJECT_ID = 270 ) AS D
GROUP BY D.PROJECT_ID,
D.M_NAME,
D.M_ID;
推荐阅读
- c++ - C ++中struct后双括号的含义?
- ssl - Windows 上的 Composer 安装程序错误:OpenSSL 因“证书验证失败”错误而失败
- ceph - cephfs 出现“只读文件系统”错误,如何处理?
- python - IndentationError: unindent 不匹配任何外部缩进
- amazon-web-services - 如何让 Terraform 等待 cloudinit 完成?
- python - python 3中的try/except问题语句
- mysql - 从命令行连接MySQL,命令行实用程序怎么会如此不稳定?
- python - How to replace white space in column? Pandas
- python - Pandas 滚动总和,包括前几天和未来几天
- reactjs - 在 React 中使用一个或多个初始 useEffects?