Выберите пользователей, которые ответили на все вопросы - PullRequest
0 голосов
/ 29 мая 2018

У меня есть такие таблицы:

Таблица ОТВЕТ

idAnswer   idQuestion   Status   idGame
----------------------------------------
1          9            1        1
2          6            NULL     1
3          6            1        2
4          3            NULL     2
5          1            1        3
6          6            1        3
7          9            1        4
8          6            1        4  

Таблица ИГРА :

idGame   idUser
----------------
1        Greg
2        Greg
3        Jack
4        Frank

Я хочу получить только тех, кто ответил на тот же вопрос, что и игра n ° 4, например:

Желаемый результат:

idUser
-------
Greg
Frank

Статус используется для проверки того, был ли дан ответ на вопрос.,Если он равен NULL, пользователь не ответил на него.

Здесь у Фрэнка была очень похожая игра (очевидно, потому что она такая же, n ° 4).

Грег не сделалНе играл в похожую игру, но ответил на 2 других вопроса, и он появляется в результате.

Джек ответил на один вопрос (№ 6), но не ответил на другой (№ 9), поэтому Джек не появляется.

Итак, результат включаеттолько те, кто ответил на те же вопросы, что и другая игра, независимо от того, входит ли она в похожую игру или в несколько игр.

Игры генерируются случайным образом.Иногда пользователь может ответить на вопрос, с которым он уже столкнулся и / или ответил.(Как и Грег, в играх 1 и 2).

Я пробовал много запросов.Я могу опубликовать их, если хотите.

Спасибо за ответы!

1 Ответ

0 голосов
/ 29 мая 2018

Вы можете попробовать это:

SELECT g.idUser, COUNT(*) as NumberOfAnswers
FROM answer a
      INNER JOIN game g ON a.idGame = g.idGame
WHERE a.idQuestion IN (9,6)
GROUP BY g.idUser
HAVING NumberOfAnswers = 2

Я думаю, что это решение соответствует вашим требованиям, если пользователи не могут ответить на один и тот же вопрос дважды в одной и той же игре, и если вы не против показать пользователям, которые ответилибольше вопросов.

РЕДАКТИРОВАТЬ:

Для более общего решения, вы можете адаптировать запрос к чему-то вроде этого:

SELECT g.idUser, COUNT(*) as NumberOfAnswers
FROM answer a
    INNER JOIN game g ON a.idGame = g.idGame
WHERE a.idCuestion IN (SELECT idQuestion FROM answer WHERE idGame=[DESIRED_GAME])
GROUP BY g.IdUser
HAVING NumberOfAnswers = (SELECT COUNT(*) FROM answer WHERE idGame = [DESIRED_GAME]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...