Как найти нужный "элемент" в массиве jsonb?
Есть таблица table2, в ней есть столбец data, который является jsonb. В нем такая структура:
{
"jsonb": {
"ver": 0
},
"info": [
{
"name": "Ivan",
"isMain": false
},
{
"name": "Denis",
"isMain": true
},
{
"name": "Dima",
"isMain": false
}
],
}
Я делаю запрос к какой-то таблице table1, join-ом соединяю ее с table2, и пытаюсь достать какие-то значения из обоих таблиц (обычным select-ом). Но мне нужно как-то из этого jsonb поля достать name, который соответствует isMain = true, то есть нужно получить Denis. Как это можно сделать? Я пытаюсь придумать что-то, связанное с таким вариантом, но ничего не получается:
select tbl1.id,
jsonb_array_elements(tbl2.data -> 'info' ->> 'name') as main_name (но не понимаю, куда вставлять условие)
from table1 tbl1
join table2 tbl2 on tbl1.id = tbl2.id
Ответы (1 шт):
Автор решения: Александр Окостень
→ Ссылка
Вы можете попробовать использовать следующий код. Прошу дать знать если он вам помог!
SELECT tbl1.id, main_info->>'name' AS main_name
FROM table1 tbl1
JOIN table2 tbl2 ON tbl1.id = tbl2.id
CROSS JOIN LATERAL (
SELECT jsonb_array_elements(tbl2.data->'info') AS main_info
WHERE main_info->>'isMain' = 'true'
) subquery;