我有一个非常基本的表格设置:
CREATE TABLE rooms (id UUID PRIMARY KEY, room_type VARCHAR(255));
CREATE TABLE subscriptions (room_id UUID, user_id UUID);
CREATE TABLE users (id UUID PRIMARY KEY, name VARCHAR(255));
鉴于用户ID列表,我需要找到任何具有与之关联的用户列表的房间。
答案 0 :(得分:1)
您可以使用group by
和having
:
select s.room_id
from subscriptions s
group by s.room_id
having count(distinct case when s.user_id in ( . . . ) then s.user_id end) = N and
count(*) = N;
其中N是列表的大小。例如:
having count(distinct case when s.user_id in (1, 2, 3) then s.user_id end) = 3 and
count(distinct s.user_id) = 3;
注意:如果您知道用户/房间对是唯一的,请使用count()
而不是distinct
。