#postgresql #jsonb
#postgresql #jsonb
Вопрос:
У меня есть столбец JSONB в моей базе данных PostgreSQL. Данные выглядят следующим образом:
{
"cars":
[
{
"id": 1,
"brand": "BMW"
"parts":
[
{
"partId": 5,
"type": "battery"
}
]
},
{
"id": 2,
"brand": "Mercedes"
"parts":
[
{
"partId": 5,
"type": "battery"
},
{
"partId": 6,
"type": "engine"
}
]
}
]
}
Есть ли какой-либо способ, которым я могу искать все автомобили, у которых есть деталь с типом «аккумулятор»? Как я могу выполнить поиск внутри массива cars, а затем внутри массива parts каждого элемента car?
Комментарии:
1. Какой результат вы ожидаете? Также обновите свою версию базы данных Postgresql
Ответ №1:
Поскольку в вашем вопросе неясно, какой вывод вы хотите. Итак, я предполагаю, что вы хотите 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'
Комментарии:
1. Я только что протестировал ваше решение, и оно работает нормально. Поздравляю!