如何检查我的'{1, 2, 3}'
表中是否存在任意数组的用户ID,例如users
,其中users.id
是bigserial
和{{ 1}}?
更新:感谢您提供不同的解决方案。如果PRIMARY KEY
表有TONS行且用户ID数组相对较小,哪种方法效率最高?
答案 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)
)