回答

收藏

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

技术问答 技术问答 234 人阅读 | 0 人回复 | 2023-09-13

好的,我在解释问题时很糟糕,所以我只先给您引号和链接:# 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”关键字是可选的。我在上面插入了它,以帮助查询更有意义
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则