我希望能做到以下几点是直截了当的: 给定包含
形式的jsonb的行{
'a':"hello",
'b':['jim','bob','kate']
}
我希望能够从表中获取所有'b'字段(如在mytable中选择jsondata->'b'),然后形成一个列表,该列表包含至少出现在一个中的所有字符串' b'场地。 (基本上是一个联盟。)
我该怎么做?或者我最好使用python脚本提取'b'条目,在那里进行set-union,然后将其存储回其他地方的数据库中?
答案 0 :(得分:0)
这为您提供了json列表'b'中的联合元素集。
SELECT array_agg(a order by a)
FROM (SELECT DISTINCT unnest(txt_arr) AS a FROM
(SELECT ARRAY(SELECT trim(elem::text, '"')
FROM jsonb_array_elements(jsondata->'b') elem) AS txt_arr
FROM jtest1)y)z;
查询说明:
jsondata->'b'
jsonb_array_elements()
函数的一组JSON值。"
function。trim()
部分
array()
功能再次转换为数组。unnest()
函数取消它,获取不同的值。array_agg()
用于形成预期结果。