如何检查 table 中的数据集中是否存在所有数组元素

How to check if all array elements exists in set of data in table

我有整数值数组:[1,2,3,4,6,52]

我想检查这组整数值是否存在于 postgres table 集合中

Table 并设置结构:

在此示例中,我的数组值存在于第二个 table 集合中。

我该如何解决这个问题?

如果你想要每个 door_id 的一行,其 available_id 的集合与给定数组完全相同,你可以像这样使用聚合:

select door_id
from mytable
group by door_id
having array_agg(available_id order by available_id) = array[1,2,3,4,6,52]

如果您不介意包含子集:

having array_agg(available_id order by available_id) @> array[1,2,3,4,6,52]

如果你想要所有对应的行,使用window聚合:

select *
from (
    select t.*, 
        array_agg(available_id order by available_id) over(partition by door_id) arr
    from mytable t
) t
where arr @> array[1,2,3,4,6,52]