当前位置: 首页 > 面试题库 >

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

倪鹏
2023-03-14
问题内容

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

问题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吗?


问题答案:

子查询有许多很棒的方法,但是看来在本教程中您仅使用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”关键字是可选的。我在上面插入了它,以帮助查询更有意义



 类似资料:
  • 问题内容: 我正在使用此查询: 产生以下结果: 我改变了场CAT_ID到一个名为新表包含的字段,,。我如何通过也加入该表来编写新查询,以获得与上述相同的结果? 我是数据库新手,需要帮助。提前致谢 问题答案: 试试这个: 这个想法很简单,在新表中的第一个字段是工作作为 代理键 ,它没有任何与其他两个表之间的关系。然后,我们来到了另外两个领域是哪些,这些你应该映射到关系的其他两个方面。 您不能使用新模

  • 我正在使用React,使用NodeJS将数据发送到我的PostgreSQL数据库。我的songs表中有一个外键,它引用了albums表中的id。我的问题是,如何将我第一次插入的id返回到第二次插入的相册中?以下是我目前的代码: 我还没有将专辑id添加到我的歌曲插入中。我在等着看如何把唱片id的值输入到我的第二个插页中?

  • 我有三个表:user、home、user_home。 在代码中,我有实体用户和主页。 但是我收到下一条消息:“QuerySyntaxException:UserHome没有映射”

  • 问题内容: 在我的数据库中有4个关系表,想加入它们以获取总价值…例如,我有朋友,家人,关注者和熟人,并希望加入这些以获得“ ALL”值。 表格格式如下: 朋友们 家庭 下列的 熟人 是联接所有4个表的正确查询… 基本上,我想从其中id =我的id的所有四个表中检索“ following”(跟随)值 问题答案: 如果 所有表 都具有与Friends表的链接,则当前查询仅列出结果。我相信您正在寻找类似

  • 问题内容: 我有以下查询: 所以我正在使用并抓住。所以现在,我要获取该image_id并将其从图像表中转换成。 如何将其添加到查询中? 问题答案: 您可以简单地添加另一个联接,如下所示: 但是请注意,由于它是一个,如果您的消息中没有图像,则将跳过整个行。如果可能的话,您可能需要执行一次操作,该操作将仅在存在一个仪表板消息的情况下返回所有仪表板消息和一个image_filename(否则,您将获得n

  • 问题内容: 我正在尝试一次从三个表中检索数据。这些表如下所示: 类别 讯息 评论 我想要得到的是1条消息(因为我有一个基于id的子句),3个类别(因为有3个类别链接到消息)和2条注释(因为有2条注释链接到消息)。 我正在尝试使用以下查询来检索数据: 但是,当运行此查询时,我得到6个结果: 在我预期结果如下的地方: 只有三行,我应该能够获取所有需要的数据。这有可能吗?我做错了吗?? 问题答案: 如评