Вот вариант запроса Стивена для универсальных массивов:
SELECT user_id
FROM group_privilege_details
WHERE group_id = ANY(my_array)
GROUP BY 1
HAVING count(*) = array_length(my_array, 1)
Работает при условии соблюдения этих требований (не упомянутых в вопросе):
- (user_id, group_id) уникален в
group_privilege_details
.
- массив имеет только 1 измерение
- базовые элементы массива уникальны
A универсальное решение , которое работает независимо от следующих условий:
WITH ids AS (SELECT DISTINCT unnest(my_array) group_id)
SELECT g.user_id
FROM (SELECT user_id, group_id FROM group_privilege_details GROUP BY 1,2) g
JOIN ids USING (group_id)
GROUP BY 1
HAVING count(*) = (SELECT count(*) FROM ids)
unnest () создает одну строку для каждого базового элемента. DISTINCT
удаляет возможные дубликаты. Подвыбор делает то же самое для таблицы.
Обширный список опций для запросов такого типа: Как отфильтровать результаты SQL в соотношении "сквозная связь"