помочь с SQL-запросом, объединяющим 2 таблицы многие-многие - PullRequest
0 голосов
/ 22 августа 2010

Я хочу помочь, как решить эту проблему SQL.Предположим, у меня есть 3 таблицы

Фильм

  • ID
  • Имя

Жанр

  • ID
  • Имя

Movie_Genre (это ссылка для многих ко многим)

  • FK_MovieID
  • FK_GenreID

я хочу выбрать все фильмы жанра 1 и жанра 3
как это возможно?
я могу выбирать фильмы только одного жанра, но не фильмы 2 жанров, используя

    SELECT Movie.ID, Movie.Name 
      FROM Movies
INNER JOIN Movie_Genre ON Movie_Genre.FK_MovieID=Movie.ID
                      AND Movie_Genre.FK_GenreID = 1

1 Ответ

2 голосов
/ 22 августа 2010

Использование:

  SELECT m.id, 
         m.name
    FROM MOVIE m
    JOIN MOVIE_GENRE mg ON mg.fk_movieid = m.id
                       AND mg.fk_genreid IN (1, 3)
GROUP BY m.id, m.name
  HAVING COUNT(DISTINCT mg.fk_genreid) = 2

Последняя строка является ключом для получения строк из обоих жанров - DISTINCT означает, что дублированные ассоциации (IE: два экземпляра жанра 1) будут игнорироваться, поскольку они являются ложноположительными. Но количество должно соответствовать количеству жанров, которые вы ищете.

Но COUNT(DISINCT не поддерживается всеми базами данных. Вы должны указать, что вы используете - если не по тегу, то в вопросе ... Если первичным ключом для таблицы MOVIE_GENRE является fk_movieid и fk_genreid, то это не вопрос. Следующим лучшим вариантом будет то, что оба столбца находятся в уникальном ограничении / индексе ...

...