2017-01-21 116 views
0

選擇行我有一個非常基本的表格設置:通過一對多的關係IDS

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

你能展示一些樣本數據和預期的輸出嗎? –

回答

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,如果你知道用戶/間對是唯一的。