user_to_room テーブルがあります
roomID | userID
このクエリを使用して roomID を取得しました (n 個のユーザー ID に応じて)
SELECT roomID
FROM user_to_room
WHERE userID IN (2,5)
GROUP BY roomID
HAVING COUNT(DISTINCT userID)=2
動作しないデモ: http://www.sqlfiddle.com/#!3/00b4a/1/0
( https://stackoverflow.com/a/16511691/1405318から取得)
ただし、このクエリは、これら 2 人のユーザーがいる部屋と別のランダムなユーザーも返します。指定されたユーザー (2,3) がいる部屋のみを返すクエリが必要です。
実用的な解決策は
SELECT DISTINCT roomID
FROM user_to_room AS x2
WHERE x2.roomID NOT IN(SELECT DISTINCT roomID
FROM user_to_room
WHERE roomID IN(SELECT DISTINCT roomID
FROM user_to_room
WHERE userID IN ( 5, 2 )
GROUP BY roomID
HAVING Count(DISTINCT userID) = 2)
AND userID NOT IN( 2, 5 ))
AND roomID IN(SELECT DISTINCT roomID
FROM user_to_room
WHERE userID IN ( 5, 2 )
GROUP BY roomID
HAVING Count(DISTINCT userID) = 2)
実際のデモ: http://www.sqlfiddle.com/#!3/00b4a/2/0
しかし、これはやり過ぎだと思います。何か案は?