Извлечение данных из двух связанных между собой отношений «многие ко многим» - PullRequest
1 голос
/ 11 февраля 2012

Я практиковался с примером, который я создавал, как приведенный ниже (где я думал о том, что фильм может принадлежать ко многим категориям, а категория, которая может принадлежать, имеет много подкатегорий).

Не уверен, что цепочка двух отношений «многие ко многим» верна (я разделил их на несколько отношений «один ко многим»), но когда я делаю запрос, я получаю довольно странные результаты.

Любая подсказка, как я могу получить название фильма и название жанра для всех фильмов, даже без названия жанра?Я использую запрос, подобный этому, но он не возвращает эти заголовки: S

Если я остановлюсь после 1-го отношения «многие ко многим», результаты окажутся правильными, но как только я добавлю 2-е отношение (сзапрос ниже), я ничего не получаю ... какие-либо предложения, пожалуйста?

SELECT movie.title, genre.name 
FROM movie 
LEFT OUTER JOIN movie_genre 
ON (movie.movie_id = movie_genre.movie_id) 
JOIN genre 
ON (genre.genre_id = movie_genre.genre_id) 
JOIN genre_subgenre 
ON (genre_subgenre.genre_id = genre.genre_id) 
JOIN subgenre 
ON (subgenre.subgenre_id = genre_subgenre.subgenre_id) 



+++++++++++++++++ 
+ Movie ID (PK) + 
+ Movie Title + 
+++++++++++++++++ 
| 
| 
| 
+++++++++++++++++ 
+ Movie ID (FK) + 
+ Genre ID (FK) + 
+++++++++++++++++ 
| 
| 
| 
+++++++++++++++++++ 
+ Genre ID (PK) + 
+ Genre Name + 
+++++++++++++++++++ 
| 
| 
| 
++++++++++++++++++++ 
+ Genre ID (FK) + 
+ Subgenre ID (FK) + 
++++++++++++++++++++ 
| 
| 
| 
+++++++++++++++++++++++++ 
+ Subrenre ID (PK) + 
+ Subgenre Name (FK) + 
+++++++++++++++++++++++++

1 Ответ

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

Позвольте мне предложить пример данных, чтобы проверить, правильно ли я это понял:

  • Фильмы: «Пила», «Сумерки», «Взвод»
  • Жанр: «Триллер», «Комедия», «Боевик»
  • Поджанр: "Голливуд", "Французский", "Итальянский"

Если эта картинка правильная, то ваш дизайн может быть неправильным, поскольку между фильмом и поджанром нет никакой связи. Это сказал, попробуйте это

SELECT movie.title, genre.name 
FROM movie 
LEFT OUTER JOIN movie_genre 
ON (movie.movie_id = movie_genre.movie_id) 
JOIN genre 
ON (genre.genre_id = movie_genre.genre_id) 
LEFT OUTER JOIN genre_subgenre 
ON (genre_subgenre.genre_id = genre.genre_id) 
LEFT OUTER JOIN subgenre 
ON (subgenre.subgenre_id = genre_subgenre.subgenre_id) 
...