@> any(array[0, 1609]);
property_ids это массив bigint
Т.е. надо найти все темплейты, где в property_ids находится любой из переданных айдишников.
Уже 4й час мучаюсь
Хмм... а я вот не могу сходу придумать ничего красивого. Тут у нас есть специалисты по jsonpath — может, они подскажут? А если как-то так? SELECT t.*, ja.v_arr FROM templates AS t CROSS JOIN LATERAL ( SELECT array_agg(a.v) AS v_arr FROM jsonb_array_elements_text(t.content->'property_ids') AS a(v) ) AS ja WHERE ja.v_arr && ($1)::text[]; Кстати, @> — это же не "любой из", а "все из переданных" (в общем, проверьте, что именно нужно).
Сделал в итоге через вложенный селект, спасибо
Можно примерно так сделать без подзапроса с помощью jsonpath: select * from templates where jsonb_path_query( content, '$.property_ids[*] == $ids[*]', jsonb_build_object('ids', to_jsonb(array[0, 1609])) );
Обсуждают сегодня