Я новичок в запросе jsonb, и у меня возникла проблема. Внутри таблицы «Items» у меня есть «id» и «data» 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"
}
]
}
]
Значение в данных всегда является массивом с объектом внутри, но иногда объект может иметь значение 'fields' с объектами внутри. Максимальная глубина - один уровень.
Как выбрать идентификатор элементов, например, объекта, содержащего «paramId»: 3 и «value»: «cat», а также объект с «paramId» ": 5 and" 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%';
, но я не знать, как искать в массиве полей, если поля существуют.
Заранее благодарю за помощь.
РЕДАКТИРОВАТЬ:
Похоже, мой вопрос не ясен. Я постараюсь сделать его лучше.
Что я хочу сделать, так это найти все объекты, имеющие в столбце «данные» объекты, которые соответствуют моим критериям поиска. Это не смотря на то, находятся ли объекты на первом уровне или внутри ключа 'fields' объекта. Опять например. Эта запись должна быть выбрана, если я ищу:
'paramId': 3 AND 'value': 'cat
'paramId': 4 AND 'value': LIKE '%og%'
соответствующие значения находятся в клавише 'fields' объект с 'paramId': 6, и я не знаю, как это сделать.