2017-01-21 7 views
0

私はかなり基本的なテーブルの設定があります。ユーザーIDのリストを考えるとSELECT行

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)); 

を、私はそれに関連付けられているユーザーの正確なリストを持っているすべての部屋を見つける必要があります。

+1

サンプルデータと予想される出力を表示できますか? –

答えて

1

あなたがgroup byhavingを使用することができます。Nはリストのサイズです

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; 

。例えば:

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; 

注:ユーザー/部屋のペアが一意であることがわかっている場合distinctなしcount()を使用しています。