仍在学习 SQL/PostgreSQL。我正在努力弄清楚如何停止返回带有 null 值的数组 [null]
而只是返回一个空数组。
COALESCE(
json_agg(
CASE
WHEN socials.id IS NULL THEN NULL
ELSE json_build_object('id', socials.id, 'name', socials.social_id, 'url', socials.url)
END
), '[]'
) AS socials
我错过了什么或做错了什么?据我了解,COALESCE
用于基本上替换返回值为 null
/false
的情况。我这样想有错吗?另外我的 SQL 查询可能存在什么问题?
最佳答案
外部 COALESCE
不会执行您想要的操作,因为 json_agg()
永远不会返回 null
,除非没有输入行符合条件。并且 COALESCE
仅在 null
输入时起作用 - 不像您那样 null
/false
把它! (包含单个 null
值作为数组元素的数组与 null
不同!)
改用聚合 FILTER
子句:
SELECT COALESCE(json_agg(json_build_object('id', socials.id, 'name', socials.social_id, 'url', socials.url))
FILTER (WHERE socials.id IS NOT NULL)
, '[]') AS socials
现在,COALESCE
是有意义的,因为您可以获得结果行,但添加的 FILTER
子句可以使 >json_agg()
null
.
根据您未公开的查询,您可以添加外部 WHERE
子句:
SELECT json_agg(json_build_object('id', socials.id, 'name', socials.social_id, 'url', socials.url)) AS socials
FROM ...
WHERE socials.id IS NOT NULL
在这种情况下,添加外部 COALESCE
是没有意义的,因为如果添加的 WHERE
子句进行过滤,您将得到无行所有输入行。
关于sql - 使用 json_agg 从 SQL 查询获取 [null] 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75647466/