根据许多关系ID选择行

时间:2017-01-21 00:05:09

标签: sql postgresql

我有一个非常基本的表格设置:

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列表,我需要找到任何具有与之关联的用户列表的房间。

1 个答案:

答案 0 :(得分:1)

您可以使用group byhaving

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