1

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

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

任何线索我如何获得所有电影的电影标题和流派名称,即使是没有流派名称的电影?我正在使用与此类似的查询,但它没有返回这些标题: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) + 
+++++++++++++++++++++++++
4

1 回答 1

0

让我提出示例数据,看看我是否正确:

  • 电影:《电锯惊魂》、《暮光之城》、《排》
  • 类型:“惊悚”、“喜剧”、“动作”
  • 子类型:“好莱坞”、“法国”、“意大利”

如果这张图片是正确的,那么您的设计可能是错误的,因为电影和子类型之间没有关系。告诉你,试试这个

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) 
于 2012-02-11T10:15:33.750 回答