Postgresql 从Postgres中的JSONB中提取多个值
我有一张这样的桌子: 身份证件 属性 1. {“a”:{“kind”:“kind_1”,“value”:“val_1”},“b”:{“kind”:“kind_2”,“value”:“val_2”} 2. {“c”:{“种类”:“种类3”,“价值”:“价值1”} 3. {“a”:{“kind”:“kind_1”,“value”:“val_1”},“d”:{“kind”:“kind_4”,“value”:“val_4”}。。。。。Postgresql 从Postgres中的JSONB中提取多个值,postgresql,jsonb,Postgresql,Jsonb,我有一张这样的桌子: 身份证件 属性 1. {“a”:{“kind”:“kind_1”,“value”:“val_1”},“b”:{“kind”:“kind_2”,“value”:“val_2”} 2. {“c”:{“种类”:“种类3”,“价值”:“价值1”} 3. {“a”:{“kind”:“kind_1”,“value”:“val_1”},“d”:{“kind”:“kind_4”,“value”:“val_4”}。。。。。 您可以使用JSON路径查询: select distinct v.i
您可以使用JSON路径查询:
select distinct v.item #>> '{}'
from the_table t
cross join jsonb_array_elements(jsonb_path_query_array(t.attrs, '$.**.value')) as v(item);
v.item#>'{}'
是一个将标量JSON值转换为文本的技巧(因为强制转换不起作用)
或者,您可以使用jsonb_each()两次:
您使用的是哪个Postgres版本?@a_horse_,没有名称Postgres 12.3
select distinct v.value
from the_table t
cross join jsonb_each(t.attrs) as i(key, item)
cross join jsonb_each_text(i.item) as v(key, value)
where v.key = 'value'