小编典典

如何从三向联接表查询中列出第一个值?

sql

好的,我在解释问题时很糟糕,所以我只先给您引号和链接:

问题4b(靠近底部):

4b。列出所有“朱莉·安德鲁斯”电影的片名和最佳男主角。

电影(id,标题,年,分数,票数,导演)
演员(id,姓名)
演员(movieid,actorid或ord) (注意:movie.id = 演员.movi​​eid,
actor.id =演员.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

这里的问题是,它希望获得以“朱莉·安德鲁斯”为演员的电影的主角名单(不一定是主角),但是我要做的就是让电影成为她的主角(ord = 1)。

在没有“朱莉·安德鲁斯”的情况下,如何指定主要演员名单?我怀疑我必须对GROUP BY进行某些操作,但目前我不知道该怎么办…

编辑: 我需要使用嵌套的SELECT吗?


阅读 129

收藏
2021-04-22

共1个答案

小编典典

子查询有许多很棒的方法,但是看来在本教程中您仅使用JOIN。以下是仅使用JOIN的方法:

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

编辑(更具描述性):

这将为我们提供一个表,其中包含朱莉·安德鲁斯(Julie
Andrews)表演过的所有电影。我将演员和演员表分别别名为a1和c1,因为现在我们已经找到了电影列表,我们必须翻动并匹配再次靠在铸件台上。

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)结合起来,以获得这些电影的主角列表:

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”关键字是可选的。我在上面插入了它,以帮助查询更有意义

2021-04-22