【问题标题】:Mysql Join: How to use the same result set for multiple tablesMysql Join:如何为多个表使用相同的结果集
【发布时间】:2013-10-15 12:03:37
【问题描述】:

我在http://sqlzoo.net/wiki/Main_Page 中练习 mysql 查询,遇到了这个关于连接的特殊查询。 问题:列出“朱莉·安德鲁斯”出演的所有电影的片名和男主角。 表结构:

movie   : id,title,yr,director,budget,gross -------
actor   :id,name ----------
casting :movieid,actorid,ord

提示:主要演员是演员表中 ord 为 1 的演员 到目前为止,我的回答是:我可以获得所有电影“朱莉安德鲁斯”的电影 ID 和演员 ID。但是使用该结果集,我不知道如何获取不同表格中的标题和名称。

到目前为止我的查询:

select c1.actorid,c1.movieid 
from casting c1 
where c1.movieid in 
(
   select movieid from casting 
   join  actor on (id=actorid and name='Julie Andrews')
) and c1.ord=1

【问题讨论】:

  • 你不需要另一个里面的select语句。你只需要一个有连接的语句。
  • 您好,感谢您的回复。此查询工作正常:从演员中选择 m.title,a.name a join cast c on (a.id=c.actorid and c.ord=1) join movie m on (m.id=c.movi​​eid) and m.id in (select movieid from cast join actor on (id=actorid and name='Julie Andrews'))

标签: mysql join resultset


【解决方案1】:

是的,你应该使用 join 代替:

      select c1.actorid, c1.movieid 
        join casting c2 on c2.movieid = c1.movieid
        join  actor a on a.id=c2.actorid
      from casting c1 
        where c1.ord=1 and
              a.name='Julie Andrews'

【讨论】:

    【解决方案2】:

    作为一项学习练习,您应该将查询分解为多个步骤。

    第 1 步。列出电影片名

    SELECT movie.title AS title
    FROM movie
    

    第 2 步。列出朱莉·安德鲁斯主演的电影:

    SELECT movie.title AS title
    FROM movie
    JOIN casting
      ON movie.id = casting.movieid
    JOIN actor
      ON casting.actorid = actor.id
    WHERE actor.name = 'Julie Andrews'
    

    第 3 步。主要演员。在这里,您可以根据解决问题的方式开始改变您的解决方案。

    如果您只想知道主要演员的名字。您的查询将如下所示:

    SELECT actor.name as Name 
    FROM casting
    JOIN actor
      ON actor.id = casting.actorid
    WHERE casting.ord =1
    

    但是,如果您尝试这样做:

    SELECT movie.title AS title
    FROM movie
    JOIN casting
      ON movie.id = casting.movieid
    JOIN actor
      ON casting.actorid = actor.id
    WHERE actor.name = 'Julie Andrews'
      AND casting.ord =1;
    

    你只是发现朱莉·安德鲁斯是主角。

    相反,您需要连接回actors表(我将添加一些表别名来帮助解释被连接的表的目的)

    SELECT movie.title AS title, LeadActor.name AS LeadActorName
    FROM movie
    JOIN casting AS JulieCastings
      ON movie.id = JulieCastings.movieid
    JOIN actor AS JulieAndrews
      ON JulieCastings.actorid = JulieAndrews.id
    JOIN casting AS LeadActorCastings
      ON LeadActorCastings.movieid = movie.id
    JOIN actor AS LeadActor
      ON LeadActor.id = LeadActorCastings.actorid
    WHERE JulieAndrews.name = 'Julie Andrews'
      AND LeadActor.ord =1;
    

    【讨论】:

      【解决方案3】:

      谢谢各位。 我已经通过以下查询解决了它: select m.title,a.name from actor a join cast c on (a.id=c.actorid and c.ord=1) join movie m on ( m.id=c.movi​​eid) and m.id in (select movieid 来自在 (id=actorid and name='Julie Andrews') 上的演员加入演员)

      【讨论】:

        【解决方案4】:

        我知道这是一个旧线程,但是对于像我这样仍在寻求帮助的人,我在 Shankar's 工作了一下并使用了它。希望这会有所帮助。

        SELECT title, name 
        FROM movie JOIN casting ON (movie.id = casting.movieid) 
                   JOIN actor ON (actor.id = casting.actorid)
        WHERE movieid IN (SELECT movieid 
                          FROM casting JOIN actor ON (actor.id = casting.actorid)
                          WHERE name = 'Julie Andrews') 
                          AND ord = 1
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-02-07
          • 1970-01-01
          • 2011-10-20
          • 1970-01-01
          • 2012-09-13
          • 1970-01-01
          • 2016-10-18
          • 1970-01-01
          相关资源
          最近更新 更多