从对象数组jsonb中获取值PostgreSQL

时间:2018-07-02 14:32:36

标签: sql postgresql

我正在这样的对象的jsonb数组中存储一些ID和名称

[{"id":"1","name":"abc"},{"id":"2","name":"cde"}]

我的桌子看起来像这样

id      userinfo
1       [{"id":"1","name":"abc"},{"id":"2","name":"cde"}]
2       [{"id":"3","name":"fgh"},{"id":"4","name":"ijk"}]    

我正在尝试选择ID为1的所有记录,但我只想在不希望使用名称的userinfo对象中获取ID

我尝试过

select distinct userinfo->'name' from table where id = 1

但这给了我空值

这将适用于该查询

select distinct userinfo->0->'name' from table where id = 1

但是我不知道索引,所以如何使用此查询来获得所需的结果

谢谢

1 个答案:

答案 0 :(得分:0)

您需要通过取消嵌套数组来规范化数据,然后才能访问每个元素。

select ui.info ->> 'id' as id,
       ui.info ->> 'name' as name
from the_table t
  cross join lateral jsonb_array_elements(t.userinfo) as ui(info)
 where t.id = 1;

在线示例:http://rextester.com/FCNM11312