我是 jsonb 请求的新手,我遇到了问题。在“项目”表中,我有“id”和“数据”jsonb。这是看起来像数据的内容:
[
{
"paramId": 3,
"value": "dog"
},
{
"paramId": 4,
"value": "cat"
},
{
"paramId": 5,
"value": "fish"
},
{
"paramId": 6,
"value": "",
"fields": [
{
"paramId": 3,
"value": "cat"
},
{
"paramId": 4,
"value": "dog"
}
]
},
{
"paramId": 6,
"value": "",
"fields": [
{
"paramId": 5,
"value": "cat"
},
{
"paramId": 3,
"value": "dog"
}
]
}
]
data 中的值始终是一个包含对象的数组,但有时对象可以具有包含对象的“字段”值。最大深度为一级。
如何选择项目的 id,例如包含“paramId”:3 和“value”:“cat”的对象,并且还有一个带有“paramId”:5 和“value”的对象 LIKE '%ish%' .
当对象处于 0 级时,我已经找到了一种方法来做到这一点
SELECT i.*
FROM items i
JOIN LATERAL jsonb_array_elements(i.data) obj3(val) ON obj.val->>'paramId' = '3'
JOIN LATERAL jsonb_array_elements(i.data) obj5(val) ON obj2.val->>'paramId' = '5'
WHERE obj3.val->>'valeur' = 'cat'
AND obj5.val->>'valeur' LIKE '%ish%';
但如果字段存在,我不知道如何在字段数组中搜索。
预先感谢您的帮助。
编辑:
看起来我的问题不清楚。我会努力让它变得更好。
我想要做的是找到“数据”列对象中符合我的搜索条件的所有“项目”。这无需查看对象是在第一级还是在对象的“字段”键内。再例如。如果我搜索应选择此记录:
'paramId': 3 AND 'value': 'cat
'paramId': 4 AND 'value': LIKE '%og%'
匹配的在 'paramId': 6 对象的 'fields' 键中,我不知道该怎么做。