【发布时间】:2026-01-06 22:10:01
【问题描述】:
我在名为reports 的表中有一个名为data 的jsonb 列。这是report.id = 1 的样子
[
{
"Product": [
{
"productIDs": [
"ABC1",
"ABC2"
],
"groupID": "Food123"
},
{
"productIDs": [
"EFG1"
],
"groupID": "Electronic123"
}
],
"Package": [
{
"groupID": "Electronic123"
}
],
"type": "Produce"
},
{
"Product": [
{
"productIDs": [
"ABC1",
"ABC2"
],
"groupID": "Clothes123"
}
],
"Package": [
{
"groupID": "Food123"
}
],
"type": "Wearables"
}
]
这是report.id = 2 的样子:
[
{
"Product": [
{
"productIDs": [
"XYZ1",
"XYZ2"
],
"groupID": "Food123"
}
],
"Package": [],
"type": "Wearable"
},
{
"Product": [
{
"productIDs": [
"ABC1",
"ABC2"
],
"groupID": "Clothes123"
}
],
"Package": [
{
"groupID": "Food123"
}
],
"type": "Wearables"
}
]
我正在尝试获取reports 表中所有条目的列表,其中至少一个data 列的元素具有以下内容:
type = Produce 和
其中Product 数组的任何元素或Product 数组的groupID 的任何元素都以Food 开头
所以从上面的例子来看,这个查询只会返回第一个索引
- 类型 =
Produce - groupID 以
Food开头,表示Product数组的第一个元素
第二个索引将被过滤掉,因为类型不是Produce。
我不确定如何查询以对 groupID 进行 AND 查询。这是我试图获取类型Produce的所有条目
select * from reports r, jsonb_to_recordset(r.data) as items(type text) where items.type like 'Produce';
【问题讨论】:
标签: sql json postgresql jsonb lateral