PostgreSQL 12.9:如何将JSONB数组中的键提取为查询结果列并展开数据
没问题,这在PostgreSQL 12.9里完全可以实现,核心是用jsonb_array_elements函数把jsonb数组拆分成多行记录,再结合字段提取就能得到你要的格式。
直接上查询语句:
SELECT row_number() OVER (ORDER BY e.id, f.family_obj->>'role') AS id, e.first_name, e.last_name, f.family_obj->>'name' AS family_name, f.family_obj->>'role' AS role FROM EmployeeFamily e, jsonb_array_elements(e.family) AS f(family_obj);
简单解释下关键部分:
jsonb_array_elements(e.family):把每个员工的family字段(jsonb数组)拆分成独立的jsonb对象行,这里用别名f(family_obj)来指代这些拆分出的对象。->>操作符:从jsonb对象里提取指定键对应的文本值,确保返回的是字符串类型而不是jsonb类型。row_number() OVER (...):生成你结果里的连续自增id,按原表的id和家庭成员的role排序来保证顺序和你给出的示例一致。
执行这条语句后,就能得到你需要的扁平化结果啦。
内容的提问来源于stack exchange,提问作者mhsankar
相关产品推荐
相关产品推荐

