|
好的,我在解释问题时很糟糕,所以我只先给您引号和链接:# x$ U, V; s4 P; i
问题4b(靠近底部):" C8 f2 Z. X( n, L1 z4 H; C4 k8 z
" p" u3 `- W, m8 y2 V1 C# B; ?/ j- ]4b。列出所有“朱莉·安德鲁斯”电影的片名和最佳男主角。2 Y, r% h: f4 y2 m
& V& V2 W) f _) `& E( q4 k) Y' R( v
电影(id,标题,年,分数,票数,导演)
2 F% d$ d" r: A, k' y 演员(id,姓名)7 ^$ e& w4 Q" r
演员(movieid,actorid或ord) (注意:movie.id = 演员.movi??eid,1 Y8 s& Y% b; H8 e8 m6 s" i
actor.id =演员.actorid). ?" X/ }, h- f0 ?
. s3 [/ K: k$ Y% y& }# m2 }4 l
. g; u" U, J! i我的回答(无效):
% o5 W9 G, ~1 [2 k5 @ oSELECT title, name
/ ~0 t2 V/ d1 y f- }8 h2 x FROM casting JOIN movie
. q% }" E& Q: f1 { ON casting.movieid = movie.id5 _7 d% G' P$ R& ?
JOIN actor0 ]$ W# `9 T1 O) z. p, z$ H
ON casting.actorid = actor.id2 B; |1 R; Y# j9 m! w
WHERE name = 'Julie Andrews'
( ^' a& D7 s4 F: x5 q% g AND ord = 1/ i3 b6 I: h8 o+ D. p, S/ x9 f
这里的问题是,它希望获得以“朱莉·安德鲁斯”为演员的电影的主角名单(不一定是主角),但是我要做的就是让电影成为她的主角(ord = 1)。$ n7 \0 r' d1 p# H- j
在没有“朱莉·安德鲁斯”的情况下,如何指定主要演员名单?我怀疑我必须对GROUP BY进行某些操作,但目前我不知道该怎么办…; f" X7 K+ a" i7 I9 U
编辑: 我需要使用嵌套的SELECT吗?
- ]: s8 x, T8 p/ F - \+ X+ g0 {+ E6 O7 Y
解决方案:
& C1 s6 L6 w8 C ' i& X1 ~4 L2 K H7 d
3 \4 l6 q! K6 A$ A+ _1 Q5 \! X P
) q; j5 _' F* H- A* A3 d( C' \ 子查询有许多很棒的方法,但是看来在本教程中您仅使用JOIN。以下是仅使用JOIN的方法:
* t( j% d) L/ |SELECT5 v: H. a2 X9 [5 t% G# P
movie.title,% ?6 `8 W F) L4 T) P
a2.name
6 f% k2 O1 z! f- YFROM2 J. D4 [" R2 {8 ^& s
actor AS a17 a! q: U l: B8 p% j
JOIN casting AS c1 ON (a1.id = c1.actorid)6 m9 m. H. A& p9 E/ h
JOIN movie ON (c1.movieid = movie.id), Q7 X4 A4 P! Z
JOIN casting AS c2 ON (movie.id = c2.movieid)/ j' M' S& O4 B8 }4 l
JOIN actor AS a2 ON (c2.actorid = a2.id), m3 s+ @ w* p8 K; g8 R) V
WHERE + n4 R0 R$ U, X _2 I& {% d
a1.name = 'Julie Andrews'8 `$ E0 E! m/ c- v
AND c2.ord = 1
% v3 G' |4 l+ z2 m编辑(更具描述性):" `) y# `- S, m) O) ] H
这将为我们提供一个表,其中包含朱莉·安德鲁斯(Julie& @! F8 f5 p9 T2 M) S% d m( L/ ]8 b1 b( H
Andrews)表演过的所有电影。我将演员和演员表分别别名为a1和c1,因为现在我们已经找到了电影列表,我们必须翻动并匹配再次靠在铸件台上。
% c/ R" W/ a1 b/ t: I+ `. @SELECT
/ A5 l) B# r- {1 y movie.*! H# {9 p- K6 B' w4 R' K2 \
FROM9 D( y' A2 E, }; r) C7 G( }7 c9 V, G
actor a1
0 x" d% K8 _ n4 [8 r2 h3 n JOIN casting c1 ON (a1.id = c1.actorid)0 F2 H- d! [ k: t- }+ w% w
JOIN movie ON (c1.movieid = movie.id): `6 c9 I! B- K8 f8 [4 f
WHERE
" C/ r' ?' b( F5 ~, P' o; ~! ? a1.name = 'Julie Andrews'2 F7 ^) U% j* M1 s+ d% l y/ {% g' s3 K
现在我们有了她演过的所有电影的列表,我们需要将其与演员表(作为c2)和演员表(作为a2)结合起来,以获得这些电影的主角列表:# i6 `* ^! b" ?1 J
SELECT
5 k$ z7 E: y! q. E movie.title, -- we'll keep the movie title from our last query( k2 J5 i8 \0 ?
a2.name -- and select the actor's name (from a2, which is defined below)
{& r: _: Z1 R' A; `FROM
$ x+ f# ]5 @8 v# c3 ?- ~- H5 p" G6 P actor a1 -- \
/ ^) A$ q; h8 V, o5 [( n JOIN casting AS c1 ON (a1.id = c1.actorid) -- )- no changes here
2 r7 x$ S( `4 S, P, @* X n# {. G JOIN movie ON (c1.movieid = movie.id) -- /: Y; M" l) x0 y, K2 Z
JOIN casting AS c2 ON (movie.id = c2.movieid) -- join list of JA movies to the cast
8 G7 f4 j( P4 G& h+ C" Z% e JOIN actor AS a2 ON (c2.actorid = a2.id) -- join cast of JA movies to the actors7 e5 G# [$ u, b, ?0 I' |9 d9 ?( ` y: Q
WHERE ; O1 G: {6 r6 D+ m7 f
a1.name = 'Julie Andrews' -- no changes
* x7 m# j* ^7 ~# D7 O* O% c2 ` AND c2.ord = 1 -- only select the star of the JA film
6 \- O' N: `& i0 i+ t& e0 f6 b编辑:在别名中,“ AS”关键字是可选的。我在上面插入了它,以帮助查询更有意义 |
|