sql - 获取 jsonb 数组中具有相同键的所有对象的列表
问题描述
我有一个表mytable
和一个 JSONB 列employees
,其中包含如下数据:
[ {
"name":"Raj",
"email":"raj@gmail.com",
"age":32
},
{
"name":"Mohan",
"email":"Mohan@yahoo.com",
"age":21
}
]
我想只提取名称并将它们保存为列表格式,因此生成的单元格将如下所示:
['Raj','Mohan']
我试过了
select l1.obj ->> 'name' names
from mytable t
cross join jsonb_array_elements(t.employees) as l1(obj)
但这仅返回第一个数组元素的名称。如何获取所有数组元素的名称?谢谢!
PostgreSQL 11.8
解决方案
在 Postgres 12 中,您可以使用jsonb_path_query_array()
:
select jsonb_path_query_array(employees, '$[*].name') as names
from mytable
在早期版本中,您需要取消嵌套然后聚合回来:
select (select jsonb_agg(e -> 'name')
from jsonb_array_elements(employees) as t(e)) as names
from mytable
推荐阅读
- php - 为什么我的数据上传不起作用并且没有丢弃任何错误?
- python - 运行 SQL Alchemy 迁移命令时,两个 Python Flask App 共享相同的数据库删除表问题
- c++ - 构造函数中定义的类函数的默认参数
- javascript - 在 nextjs 上处理延迟加载数据列表
- c++ - 复制后删除原始数组指针将前 3 个字节设置为 0
- c++ - 在 Qt 项目中独立于路径包含外部库
- python - `PIL.Image.Show()` 临时存储图像在哪里,之后会被删除吗?
- python - 使用 Google Docs API 在不影响格式的情况下更改整个文档的字体
- javascript - 开玩笑监视数组元素
- google-cloud-platform - 无法从谷歌云虚拟机连接到谷歌云 Paas 实例。两者都在不同的地区