从两个链接的多对多关系中检索数据

时间:2012-02-11 09:43:22

标签: mysql database join many-to-many table-relationships

我正在练习一个我正在创建的示例,如下所示(我正在考虑一部电影能够属于许多类别而且一个类别能够属于多个子类别)。

不确定链接两个多对多关系是否正确(我将它们分成几个一对多的关系),但是当我进行查询时,我得到了非常奇怪的结果。

任何线索我怎样才能获得所有电影的电影片名和流派名称,即使是没有流派名称的电影?我正在使用类似于此的查询,但它没有返回这些标题:S

如果我在第一个多对多关系后停止,结果似乎是正确的但是一旦我添加了第二个关系(下面的查询),我什么都没收到......有什么建议吗?

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 :(得分:0)

让我提出样本数据,看看我是否做对了:

  • 电影:“Saw”,“Twilight”,“Platoon”
  • 类型:“惊悚”,“喜剧”,“动作”
  • 子类型:“好莱坞”,“法语”,“意大利语”

如果这张图片是正确的,那么你的设计可能是错误的,因为Movie和Subgenre之间没有任何关系。那说,试试这个

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)