PostgreSQL检查表中是否存在所有代理ID

时间:2016-09-16 21:50:08

标签: arrays postgresql

如何检查我的'{1, 2, 3}'表中是否存在任意数组的用户ID,例如users,其中users.idbigserial和{{ 1}}?

更新:感谢您提供不同的解决方案。如果PRIMARY KEY表有TONS行且用户ID数组相对较小,哪种方法效率最高?

3 个答案:

答案 0 :(得分:1)

一种方法是聚合你的id并使用包含运算符的数组

select array_agg(id) @> '{1,2,3}' from users

另一个是取消数组中的值并将其与表连接以在集合中执行布尔值和

select bool_and(u.id is not null)
from unnest('{1,2,3}'::int[]) as t(id)
left join users u using ( id )

还有很多其他方法可以解决它,所以这只是你的选择。

答案 1 :(得分:1)

SELECT  CASE WHEN COUNT(*) = array_length(array[1,2,3], 1)
             THEN 'You Have all'
             ELSE 'SomeOne is missing'
        END as result
FROM    users
WHERE   users.id  = ANY(ARRAY[1, 2, 3])

答案 2 :(得分:0)

此查询对我有用:

WITH expected_users AS (SELECT unnest(users) AS id FROM array[1,2,3] AS users)
SELECT NOT EXISTS (
    SELECT
        1
    FROM 
        expected_users eu
        WHERE NOT EXISTS (SELECT 1 FROM users u WHERE eu.id = u.id)
)