繁体   English   中英

使用 json_agg(json_build_object(.......)) 时,如何确保 json_build_object 返回空列表

[英]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

dbfiddle

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM