繁体   English   中英

postgreSQL查询jsonb列中的空数组字段

[英]postgreSQL query empty array fields within jsonb column

device_id | device
-----------------------------
9809      | { "name" : "printer", "tags" : [] }    
9810      | { "name" : "phone", "tags" : [{"count": 2, "price" : 77}, {"count": 3, "price" : 37} ] }

对于包含数组'tags'的jsonb列“device”上的以下postgres SQL查询:

SELECT t.device_id, elem->>'count', elem->>'price'
FROM   tbl t, json_array_elements(t.device->'tags') elem
where t.device_id = 9809

device_id是主键。

我有两个问题,我不知道如何解决:

  1. tags是一个可能为空的数组字段,在这种情况下我有0行。 我想要输出无论标签是否为空。 假的价值还可以。
  2. 如果标签包含多个元素,则我为同一设备ID获取多行。 如何将这些多个元素聚合成一行?

您的第一个问题可以通过使用左外连接来解决,该连接将在右侧替换NULL值以寻找缺失的匹配。

第二个问题可以通过聚合函数解决,如json_aggarray_aggstring_agg ,具体取决于所需的结果类型:

SELECT t.device_id,
       jsonb_agg(elem->>'count'),
       jsonb_agg(elem->>'price')
FROM tbl t
   LEFT JOIN LATERAL jsonb_array_elements(t.device->'tags') elem
      ON TRUE
GROUP BY t.device_id;

对于那些数组为空的行,你将获得一个只包含null的JSON数组,我希望你没问题。

暂无
暂无

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

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