首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何列出三个连接表查询的第一个值?

如何列出三个连接表查询的第一个值?
EN

Stack Overflow用户
提问于 2009-01-11 23:31:50
回答 9查看 5.1K关注 0票数 1

好吧,我很难解释事情,所以我先给你引号和链接:

问题4b (接近底部):

4b。列出所有“朱莉·安德鲁斯”电影的片名和主角。 电影(id,标题,yr,得分,投票,导演) 演员(id,姓名) 铸造(movieid,actorid,ord) (注: movie.id = casting.movieid,actor.id = casting.actorid)

我的回答(不起作用):

亲水相SELECT title, name

粉末冶金FROM casting JOIN movie

成本法-成品油-贴水制ON casting.movieid = movie.id

粉末冶金JOIN actor

成本法-成品油-贴水制ON casting.actorid = actor.id

粉末冶金WHERE name = 'Julie Andrews'

粉末冶金AND ord = 1

这里的问题是,它想要的是以朱莉·安德鲁斯(Julie Andrews)为演员(他不一定是主角)的电影主角名单,但我所做的只是得到她是主角的电影(ord = 1)。

我该如何指定没有“朱莉·安德鲁斯”的主角名单呢?我想我得和团队一起做点什么,但我不知道现在是什么.

编辑:,我需要使用嵌套的选择吗?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-01-11 23:48:33

对于子查询,有很多很好的方法可以实现这一点,但是在本教程中,您似乎只使用联接。下面是只使用联接的方式:

代码语言:javascript
复制
SELECT
  movie.title,
  a2.name
FROM
  actor AS a1
  JOIN casting AS c1 ON (a1.id = c1.actorid)
  JOIN movie ON (c1.movieid = movie.id)
  JOIN casting AS c2 ON (movie.id = c2.movieid)
  JOIN actor AS a2 ON (c2.actorid = a2.id)
WHERE 
  a1.name = 'Julie Andrews'
  AND c2.ord = 1

编辑(更多描述性):

这会给我们一张桌子,里面放着朱莉·安德鲁斯演的所有电影。我将演员表和演员表分别别名为a1和c1,因为现在我们已经找到了一个电影列表,我们将不得不再次将其与have表匹配。

代码语言:javascript
复制
SELECT
  movie.*
FROM
  actor a1
  JOIN casting c1 ON (a1.id = c1.actorid)
  JOIN movie ON (c1.movieid = movie.id)
WHERE
  a1.name = 'Julie Andrews'

现在我们已经有了所有她演过的电影的列表,我们需要将其与演员表(如c2)和演员表(作为a2)连接起来,以获得这些电影的主角列表:

代码语言:javascript
复制
SELECT
  movie.title,  -- we'll keep the movie title from our last query
  a2.name       -- and select the actor's name (from a2, which is defined below)
FROM
  actor a1                                     -- \
  JOIN casting AS c1 ON (a1.id = c1.actorid)   --  )- no changes here
  JOIN movie ON (c1.movieid = movie.id)        -- /
  JOIN casting AS c2 ON (movie.id = c2.movieid)  -- join list of JA movies to the cast
  JOIN actor AS a2 ON (c2.actorid = a2.id)  -- join cast of JA movies to the actors
WHERE 
  a1.name = 'Julie Andrews'  -- no changes
  AND c2.ord = 1    -- only select the star of the JA film

编辑:在别名中,“AS”关键字是可选的。我在上面插入了它,以帮助查询更有意义

票数 6
EN

Stack Overflow用户

发布于 2009-01-11 23:50:59

您希望将电影与casting表中的两行相匹配:一行朱莉·安德鲁斯是演员,第二行可能是朱莉·安德鲁斯,也可能不是朱莉·安德鲁斯,但后者是影片的主角。

朱莉

因此,您需要两次连接到casting表。

代码语言:javascript
复制
SELECT m.title, lead.name
FROM actor AS julie
 JOIN casting AS c1 ON (julie.id = c1.actorid)
 JOIN movie AS m ON (c1.movieid = m.id)
 JOIN casting AS c2 ON (m.id = c2.movieid)
 JOIN actor AS lead ON (c2.actorid = lead.id)
WHERE julie.name = 'Julie Andrews'
 AND c2.ord = 1;

请记住,“表别名”引用可能不同的行,即使它们是同一个表的别名。

票数 4
EN

Stack Overflow用户

发布于 2009-01-11 23:43:44

代码语言:javascript
复制
SELECT title, name
      FROM casting JOIN movie
              ON casting.movieid = movie.id
      JOIN actor
              ON casting.actorid = actor.id
     WHERE ord = 1
     and   casting.movieid in 
          (select movieid
           from   casting
                  join actor
                      on actor.id = casting.actorid
           where  actor.name = 'Julie Andrews')
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/434013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档