【问题标题】:SQL Multiple Inner Joins on the same field同一字段上的 SQL 多个内部联接
【发布时间】:2011-07-10 06:21:10
【问题描述】:

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

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

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

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

我目前对如何创建多个 SELECT 查询感到困惑,该查询将根据 *movie_ID* 和 *people_ID* 将所有链接表连接在一起,然后返回 中每个人的详细信息people 表也是如此。

到目前为止,我所写的示例是:

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 查询临时制定了一个肮脏的解决方案。看起来做多个内部连接毕竟不是必需的。不过感谢您的建议。

【问题讨论】:

  • 你想要每个人的所有行以及他们的上下文/电影的幕后角色吗?或者,您是否想要一列显示“导演”、“作家”、“演员”等的所有名称...
  • 如果可能的话,我希望有多个列。

标签: mysql innodb inner-join


【解决方案1】:

你可以这样实现你的目标:

选择电影名称, dbo.GetDirector(MovieID), dbo.GetActors(MovieID), dbo.GetWriter(MovieID) FROM 电影

在哪里

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

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 2014-05-30
    相关资源
    最近更新 更多