Sql 又是一个新的查询。我试着从一小时内解决这个问题。请帮忙

Sql 又是一个新的查询。我试着从一小时内解决这个问题。请帮忙,sql,mysql,sql-server,Sql,Mysql,Sql Server,查询:列出《朱莉·安德鲁斯》所有电影的片名和主角 有三张桌子 电影(身份证、片名、年份、配乐、投票、导演) 演员(身份证、姓名) 演员阵容(电影ID、actorid、ord) 实际上我不知道如何找到主角。首先,你不应该在关键栏中使用id,而应该使用movieid和actorid。这使得连接更容易: select movie.title, lead.name as cont from actor join casting using (actorid) join

查询:列出《朱莉·安德鲁斯》所有电影的片名和主角

有三张桌子

电影(身份证、片名、年份、配乐、投票、导演)

演员(身份证、姓名)

演员阵容(电影ID、actorid、ord)


实际上我不知道如何找到主角。

首先,你不应该在关键栏中使用
id
,而应该使用
movieid
actorid
。这使得连接更容易:

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。它也是完全未经测试的,因此您可能需要调试它。

假设主角是ord=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子句子查询中添加额外的联接。

如何定义主要参与者?在“ord”栏?实际上我不知道什么是ord。这是sqlzoo.net中的查询。请想一想它应该是什么?所以你们所有人都可以把这个问题总结出来,请解决所有的问题,然后发布结果?你试过阅读sqlzoo.net吗!这不起作用,我认为连接语法或其他方面有错误?我移动了
movie
,并使用子句更改了一些
。仍然未经测试,但试一试(别忘了我在
movie
表中使用了
movieid
,在
actor
表中使用了
actorid
,而不是
id
。很抱歉,我真的不明白你做了什么。说得具体点,我不知道如何更具体一些。从你的问题记录来看,你真的需要了解关于SQL编程的书,从头读到尾。嘿,我不是那个意思。对不起…但我不明白你做了什么。我有这本书,但它不会教我如何练习。我需要练习。谢谢。在一些电影中可能会出现朱莉·安德鲁不是主角的情况。对不起,忘记了加入子查询。现在我想我不知道了请注意:没问题,我已经找到正确的答案了。它正在工作。然后你应该把这个标记看作是被接受的答案。在继续之前,请试着把这个读一读:
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'
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
 )