SQL: выбрать все фильмы, которые относятся ко всем указанным жанрам - PullRequest
1 голос
/ 11 апреля 2019

У меня есть следующая таблица, которая называется Фильмы:

id     |    title                                        |    year
308       Coraline                                            2009
125       Harry Potter and the Prisoner of Azkaban            2004
204       Hugo                                                2011

и таблица Жанр:

movie_id      |    genre
308                Fantasy
308                Thriller
125                Fantasy
125                Mystery
204                Fantasy 
204                Mystery
204                Drama 

где movie_id - это внешний ключ, который ссылается на идентификатор атрибута в таблице фильмов. Я пытаюсь достать все фильмы, которые принадлежат как к жанру «Фэнтези», так и к фильму «Мистерии» (то есть выходными фильмами должны быть «Гарри Поттер и Хьюго»).

У меня следующий запрос:

SELECT title, year 
FROM Movies, Genre 
WHERE Movies.id=Genre.movie_id AND genre = 'Fantasy' AND genre = 'Mystery';

Однако я не получаю вывод из этого запроса, и я не уверен, почему. Любые идеи приветствуются.

1 Ответ

3 голосов
/ 11 апреля 2019

Вы можете сделать агрегацию и использовать having:

SELECT m.id, m.title
FROM Movies m INNER JOIN
     Genre g
     ON g.movie_id = m.id
WHERE g.genre IN ('Fantasy', 'Mystery')
GROUP BY m.id, m.title
HAVING COUNT(distinct g.genre) = 2; -- Count of where clause
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...