SQL多个内部联接在同一个字段上

时间:2011-03-07 10:30:40

标签: mysql innodb inner-join

我目前在一家小型创业公司担任程序员,目的是在线提供按次付费内容,并且我被指派为电影目录开发元数据数据库

我有两个主要表格,电影,其中* movie_ID *和* people_ID *分别是每个表的主键。两个表都有多对多的关系。

为了表示我目前正在使用链接表的不同关系,例如, actor_movie 会为电影中的每个演员存储* movie_ID *和相应的* people_ID *,而 director_movie 表将存储* movie_ID *和导演* people_ID *。作家,作曲家和制作人也是如此。

现在,我的问题是我需要制作一个查询,将一个表中的所有演员,导演,制作人,作家,作曲家等返回到前端Web UI上作为列表所有参与电影的人。

我目前难以理解如何创建一个多个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 :(得分:0)

你可以实现这样的目标:

  

SELECT MovieName,   dbo.GetDirector(MovieID),   dbo.GetActors(MovieID),   dbo.GetWriter(MovieID)FROM Movie

,其中

  • dbo.GetDirector(MovieID)是一个 将返回董事的功能 在电影中。
  • dbo.GetActors(MovieID)是一个函数 这将使电影中的演员回归。
  • dbo.GetWriter(MovieID)是一个功能 这会让作家回归 电影。

如果还有其他表,那么你也可以为这些表创建函数。

希望这有帮助。