body, в которой хранились данные вида: {..., "someIds": [1, 2]}
Был запрос, в котором значения someIds использовались для дальнейшего джоина:
`SELECT t.*
FROM test t,
LATERAL jsonb_array_elements((t.body) -> 'someIds') AS someIds
JOIN sometable st ON st.id IN (someIds::text::bigint)
WHERE ...`
Сейчас в body поменялась структура -
с {..., "someIds": [1, 2]}
на {..., ids:[{someId: 1, ...}, {someId: 2, ...},]}
т.е. теперь нужно вытащить айдишники для джойна из каждого объекта массива.
Может кто-то подсказать как нужно изменить запрос или в сторону каких операторов смотреть?
jsonb_array_elements(body -> 'ids') -> 'someId'
Так ругается на синтаксис(
Сорри, там символы были неправильные, я пофиксил
Вот при таком написании всё равно ругается на синтаксис, скорее всего, это из-за LATERAL. Пробовал делать два lateral, т.е. в первом ->'ids' as ids, а во втором ids->'someIds', и алиас второго уже подставлять в джоин, но всё равно ошибка синтаксиса(
Сделайте обычный left join или lateral, но с нормальным селектом в подзапросе. У вас теперь чуть более сложный кейс, чем построчное применение функции
спасибо за совет)
Обсуждают сегодня