问题描述
我的Postgre@R_502_6308@数据库中有一个JSONB列。数据如下:
{
"cars":
[
{
"id": 1,"brand": "BMW"
"parts":
[
{
"partId": 5,"type": "battery"
}
]
},{
"id": 2,"brand": "Mercedes"
"parts":
[
{
"partId": 5,"type": "battery"
},{
"partId": 6,"type": "engine"
}
]
}
]
}
有什么办法可以搜索所有零件类型为“电池”的汽车?如何在汽车数组内部搜索,然后在每个汽车元素的部件数组内部搜索?
解决方法
由于您的问题尚不清楚,您想要什么输出。因此,我假设您要在输出中使用id
和brand
的名称:
所以您尝试一下:
select distinct x.y->>'id',x.y->>'brand'
from test
cross join lateral jsonb_array_elements(data->'cars') x(y)
cross join lateral jsonb_array_elements(x.y->'parts') a(b)
where a.b->>'type'='battery'