jsonb поля “description” массив tags и ищет вхождения либо “java”, либо “c++”
select v.*, jsonb_agg(tags)
from vacancy v, jsonb_array_elements((v.description ->> 'tags')::jsonb) tags
where tags ?| array['java', 'c++']
group by v.id
Как должен выглядеть запрос что бы было обязательно наличие и “java” и “c++”? ?& – вот это вообще ничего не вернёт
Т.е. нужно чтобы значения [“java”, “c++”] попали в ответ, но [“java”, “kotlin”] нет
Вот такое решение нашёл, но может есть как это сделать в один запрос select i.tags_array, i.* from ( SELECT jsonb_agg(tags) AS tags_array, v.* FROM vacancy v, jsonb_array_elements((v.description ->> 'tags') :: JSONB) tags group by v.id ) i where tags_array ?& array['c++', 'java']
Обсуждают сегодня