Найти запись с точно тремя детьми - PullRequest
0 голосов
/ 11 февраля 2019

Итак, у нас есть games таблица, в которой много participants.У каждого участника есть столбец user_id.Теперь нам нужно найти игру для определенного набора участников.

Что я имею в виду, имея набор идентификаторов (1,2,3), нам нужно найти игру, в которой участниками являются именно эти три пользователя, не более, Не меньше.Я использую активную запись и попробовал что-то вроде:

Game.joins(:participants).where("user_id in (?)", [1,2,3])

Но он возвращает все игры, в которых есть хотя бы один из указанных пользователей.

1 Ответ

0 голосов
/ 11 февраля 2019

В SQL вы можете использовать group by и having:

select g.games_id
from games g
group by g.games_id
having count(*) = sum(case when user_id in (1, 2, 3) then 1 else 0 end) and
       count(*) = 3;  -- number of users in list

Первое условие проверяет, что все только указанные пользователи входят в число участников.Второй проверяет, включены ли все пользователи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...