选择特定字段并从jsonb字段中的数组获取结果

时间:2019-05-23 23:56:47

标签: json postgresql

如果我将这些数据放在jsonb字段中:

{'name': 'pratha', 'email': 'p@g.com', 'sub': { 'id': 1 } }

我可以通过此查询选择name

SELECT data_field->>'name' from users where ....

但是,当它们位于array中时,此查询将不起作用:

[
   {'name': 'pratha', 'email': 'p@g.com', 'sub': { 'id': 1 } },
   {'name': 'john', 'email': 'c@d.com', 'sub': { 'id': 2 } }
]

如何选择数组中的每个name

参见此处:http://sqlfiddle.com/#!17/22166

1 个答案:

答案 0 :(得分:2)

进行jsonb_array_elements()的横向交叉连接以获取数组的元素。然后,您可以从每个元素中提取名称。

SELECT sr.*,
       jae.e->>'name'
       FROM survey_results sr
            CROSS JOIN LATERAL jsonb_array_elements(sr.data_field) jae (e);

SQL Fiddle