Как проверить принадлежат ли массивы из одной таблицы массивам в другой?

Для проверки принадлежности массивов из одной таблицы массивам в другой в SQL можно использовать операторы JOIN и ARRAY_AGG.

Предположим, у нас есть две таблицы:

CREATE TABLE table1 (
  id INT PRIMARY KEY,
  array1 INT[]
);

CREATE TABLE table2 (
  id INT PRIMARY KEY,
  array2 INT[]
);

И мы хотим проверить, принадлежит ли каждый массив из таблицы table1 хотя бы одному массиву из таблицы table2.

Мы можем сделать это, используя операторы JOIN и ARRAY_AGG в следующем запросе:

SELECT table1.id, table1.array1, ARRAY_AGG(DISTINCT table2.array2) AS arrays_in_table2
FROM table1
LEFT JOIN table2 ON table1.array1 @> table2.array2 -- проверяем, что array1 содержит array2
GROUP BY table1.id, table1.array1;

В результате запроса мы получим таблицу с тремя столбцами: id из таблицы table1, array1 из таблицы table1 и arrays_in_table2, в котором будет содержаться массив уникальных значений array2, который принадлежит массиву array1.

Теперь мы можем проверить, содержит ли массив arrays_in_table2 элементы массива array1, добавив условие в WHERE:

SELECT id, array1, arrays_in_table2
FROM (
  SELECT table1.id, table1.array1, ARRAY_AGG(DISTINCT table2.array2) AS arrays_in_table2
  FROM table1
  LEFT JOIN table2 ON table1.array1 @> table2.array2
  GROUP BY table1.id, table1.array1
) AS subquery
WHERE arrays_in_table2 @> array1; -- проверяем, что arrays_in_table2 содержит array1

В результате этого запроса получим только те строки, где array1 из таблицы table1 принадлежит хотя бы одному массиву в arrays_in_table2.