【问题标题】:again new query. i am trying to solve this from one hour. please help再次新的查询。我试图从一小时内解决这个问题。请帮忙
【发布时间】:2011-02-16 07:42:48
【问题描述】:

查询:列出所有“朱莉·安德鲁斯”电影的片名和男主角。

一共有三张桌子

电影(id、标题、年份、分数、票数、导演)

演员(身份证,姓名)

铸造(movieid、actorid、ord)

select movie.title,actor.name as cont
from movie
join casting on (movie.id=casting.movieid)
join actor on (casting.actorid=actor.id)
where actor.name='Julie andrews'

其实我不知道怎么找男主角。

【问题讨论】:

  • 主角是如何定义的?按“ord”列?
  • 其实我不知道什么是ord。这是 sqlzoo.net 中的查询。请想想它应该是什么?
  • 所以大家可以总结一下SO问题,请解决sqlzoo.net的所有问题并发布结果?你试过阅读 sqlzoo.net 吗!

标签: sql mysql sql-server


【解决方案1】:

您几乎可以肯定需要一个子查询来以一种或另一种方式实现这一目标。

select movie.title, actor.name
from movie
inner join casting 
    on movie.id = casting.movieid
    and casting.ord = 1 --Assuming this is the cast order flag
inner join actor
    on casting.actorid = actor.id
where movie.id in (
    select movie.id
    from movie 
    inner join casting 
        on movie.id = casting.movieid
        and casting.actorid = {your actorID in this case Julie Andrew's id
 )

免责声明:我没有对此进行测试,因为您没有提供简单的方法。

如果您真的想按名称(这可能导致误报),那么您可以在 in 子句子查询中添加一个额外的连接。

【讨论】:

  • 那么您应该考虑将其标记为已接受的答案。在继续之前,请尝试阅读:stackoverflow.com/faq
【解决方案2】:

首先,你不应该使用id 作为键列,使用movieidactorid。这使得连接更容易:

select movie.title, lead.name as cont
  from actor
  join casting             using (actorid)
  join movie               using (movieid)
  join casting as leadrole using (movieid)
  join actor   as lead     on (leadrole.actorid = lead.actorid)
 where actor.name = 'Julie andrews'
   and leadrole.ord = 1

这假定主角的ord 列是 1。它也完全未经测试,因此您可能需要对其进行调试。

【讨论】:

  • 这不起作用我认为连接语法或其他任何错误?
  • 我移动了movie 并更改了一些using 子句。仍然未经测试,但试一试(别忘了我假设在movie 表中使用movieid,在actor 表中使用actorid 而不是id
  • 对不起,我真的不明白你做了什么。是特别的
  • 我不知道如何更具体。从你的问题记录来看,你真的需要一本关于 SQL 编程的书,并从头到尾阅读。
  • 嘿,我不是那个意思。对不起...但我不明白你做了什么。我有这本书,但它不会教我如何练习。我需要去练习。非常感谢
【解决方案3】:

假设主角是 ord = 1 你可以试试这个(我没有测试过)

编辑:

select 
      M.title, 
      (select 
            A1.name 
       from 
            casting CI
       join
            actors A1
       on
            A1.id = CI.actorid      
       where 
            CI.movieid = M.id 
       and 
            CI.ord = 1) as LeadingActor 
from 
      movie M
join 
      casting C
on 
      M.id = C.movieid
join 
      actor A 
on 
      C.actorid = A.id
where 
      A.name='Julie andrews'

【讨论】:

  • 在某些电影中可能会出现朱莉·安德鲁不是男主角的情况。
  • 抱歉,忘记加入子查询。现在我想我修好了:)
  • 没问题,看我标记的正确答案。它正在工作。
猜你喜欢
  • 1970-01-01
  • 2022-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-28
相关资源
最近更新 更多