好吧,我很难解释事情,所以我先给你引号和链接:
问题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)。
我该如何指定没有“朱莉·安德鲁斯”的主角名单呢?我想我得和团队一起做点什么,但我不知道现在是什么.
编辑:,我需要使用嵌套的选择吗?
发布于 2009-01-11 23:48:33
对于子查询,有很多很好的方法可以实现这一点,但是在本教程中,您似乎只使用联接。下面是只使用联接的方式:
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表匹配。
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”关键字是可选的。我在上面插入了它,以帮助查询更有意义
发布于 2009-01-11 23:50:59
您希望将电影与casting表中的两行相匹配:一行朱莉·安德鲁斯是演员,第二行可能是朱莉·安德鲁斯,也可能不是朱莉·安德鲁斯,但后者是影片的主角。
朱莉
因此,您需要两次连接到casting表。
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;请记住,“表别名”引用可能不同的行,即使它们是同一个表的别名。
发布于 2009-01-11 23:43:44
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')https://stackoverflow.com/questions/434013
复制相似问题