[英]PostgreSQL Json_build_object / json_agg add level of aggregation
[英]when use json_agg(json_build_object(.......)) ,how to ensure json_build_object return empty list
如题。 我写了一些 SQL 代码如下:
SELECT p.id,
json_agg(
json_build_object('id', sp.id)
) AS subProducts
FROM product p
LEFT JOIN sub_product sp
ON sp.product_id = p.id
GROUP BY p.id
正如将在
但我遇到了一个问题,每当product id = 2
时, subProducts
就是[{"id": null}]
我如何确保如果没有匹配项, subProducts
是[]
,
我有一个想法,将列数(subPrdocts)添加为childNum,
并检查 childNum 是否为 0。
但不是恩典。
谢谢大家。
SELECT p.id,
coalesce(json_agg(
json_build_object('id', sp.id)
) filter (where sp.id is not null ), '[]')AS subProducts
FROM product p
left JOIN sub_product sp
ON sp.product_id = p.id
GROUP BY p.id
filter 和 coalesce 是你的朋友
尝试这个:
SELECT p.id,
CASE WHEN jsonb_agg(sp.id) = '[null]' :: jsonb
THEN '[]' :: jsonb
ELSE jsonb_agg(jsonb_build_object('id', sp.id))
END AS subProducts
FROM product p
LEFT JOIN sub_product sp
ON sp.product_id = p.id
GROUP BY p.id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.