Многократные внутренние соединения SQL в одном поле - PullRequest
1 голос
/ 07 марта 2011

В настоящее время я работаю программистом в небольшом стартапе, целью которого является предоставление контента с оплатой за просмотр в Интернете, и мне поручено разработать базу метаданных для каталога фильмов

У меня есть две основные таблицы: movie и people , где * movie_ID * и * people_ID * - первичные ключи соответственно для каждой таблицы. Обе таблицы имеют отношение многие ко многим.

Для представления различных отношений я в настоящее время использую таблицы ссылок, например, actor_movie будет хранить * movie_ID * и соответствующий * people_ID * для каждого из актеров в фильме, тогда как Director_movie таблица будет хранить * movie_ID * и директора (ов) * people_ID *. То же самое касается писателя, композиторов и продюсеров.

Теперь моя проблема заключается в том, что мне нужно разработать запрос, который возвращает всех актеров, режиссеров, продюсеров, писателей, композиторов и т. Д. И т. Д. В одной таблице для передачи в веб-интерфейс веб-интерфейса в виде списка. все люди, участвующие в фильме.

В настоящее время я поставлен в тупик относительно того, как создать несколько запросов SELECT, которые бы объединяли все таблицы ссылок на основе * movie_ID * и * people_ID *, а затем возвращали сведения о каждом человеке в люди стол тоже.

И пример того, что я написал до сих пор:

SELECT
movie.titleMovie,
people.namePeople,
FROM 
movie movie

INNER JOIN actorlinkmovie acm ON acm.idMovie = movie.idMovie
INNER JOIN people people ON people.idPeople = acm.idPeople

Я бы хотел, чтобы это произошло:

SELECT
movie.idMovie,
movie.titleMovie,
movie.descMovie,
movie.dateMovie,
movie.runtimeMovie,
movie.langMovie,
movie.ratingMovie,
people.namePeople
FROM 
htv_movie movie

INNER JOIN htv_actorlinkmovie acm ON acm.idMovie = movie.idMovie
INNER JOIN htv_directorlinkmovie dcm ON dcm.idMovie = movie.idMovie
INNER JOIN htv_producerlinkmovie pcm ON pcm.idMovie = movie.idMovie
INNER JOIN htv_people people WHERE people.idPeople = dcm.idPeople AND people.idPeople = acm.idPeople AND people.idPeople = pcm.idPeople

И это должно вернуть всех связанных людей из одного фильма.

Хотелось бы получить некоторую информацию обо всем дизайне, так как я довольно новичок в разработке всей базы данных (впервые на самом деле) и подойдет ли этот дизайн, если мне нужно будет увеличить до 5000 фильмов (текущий цель компании). Эта база данных также послужит бэкэндом сайта.

Спасибо.

ОБНОВЛЕНИЕ: Временно разработано грязное решение с использованием PHP-переменных и шаблонного SQL-запроса. Похоже, что выполнение нескольких внутренних соединений не было обязательным. Спасибо за предложения, хотя.

1 Ответ

0 голосов
/ 07 марта 2011

Вы можете достичь своей цели так:

ВЫБРАТЬ MovieName, dbo.GetDirector (MovieID), dbo.GetActors (MovieID), dbo.GetWriter (MovieID) ИЗ фильма

где

  • dbo.GetDirector (MovieID) является функция, которая будет возвращать директоров в фильме.
  • dbo.GetActors (MovieID) - это функция это вернет актеров в фильме.
  • dbo.GetWriter (MovieID) - это функция что вернет писателей в фильм.

Если есть и другие таблицы, то вы также можете создавать функции для этих таблиц.

Надеюсь, это поможет.

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