我正在这样的对象的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
但是我不知道索引,所以如何使用此查询来获得所需的结果
谢谢
答案 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;