回答

收藏

MySQL:更新表中与其他查询结果匹配的所有行

技术问答 技术问答 398 人阅读 | 0 人回复 | 2023-09-14

我编写了一个查询,返回了将 Customer和Salespeoeple 关联的行。
1 W' _6 `& Z: o" a8 ~( Q" j请注意,查询将联接多个数据库表。请注意,并非所有客户都有销售人员。
, z- M1 S2 z& K5 x+ Sc_id     c_name   s_id   s_name* l4 C$ s" h+ q# P  q" I
  24  microsoft      1     mike
8 b) g0 o1 K5 ^6 D% }1 i. m  27        sun      1     mike. O8 Y( p  L5 Z- ^1 `% F$ e
  42      apple      2     bill
5 b- {5 p2 k0 {: [# F# }  44     oracle      1     mike
3 I- [1 Z/ T1 G5 l1 w$ i  47        sgi      1     mike! v: k' s* [/ z; U) ^
  58       ebay      2     bill) _7 |: }* r* m& r5 x  g1 v
  61     paypal      3      joe8 _3 w* J3 S0 r3 S( D
  65     redhat      1     mike
+ q; y3 q% Y4 T( S7 }我的数据库中也只有一个表(称为 发票 ),如下所示。
1 w' v+ b5 u. L& I1 _" ~i_id   c_id   c_name   s_id   s_name$ A  }2 Z+ v2 j; n. R9 m% U
7208     22   toyota   NULL     NULL0 v$ v( h1 z" E9 s( [0 ^3 b4 v
7209     23     ford   NULL     NULL
' w6 x) ^' {4 C4 t7210     27      sun   NULL     NULL- V3 z3 f2 z! i) C
7211     42    apple   NULL     NULL. |, W4 E" ]: I( `6 Y7 \# \
7212     12   nissan   NULL     NULL
, Z' w* s  v8 z5 h5 y& k8 ~0 h+ m# r7213     15       gm   NULL     NULL. X! x' S, Q  s! g
7214     61   paypal   NULL     NULL: x7 b; U) E9 t
如何在MySQL中使用UPDATE来使我的发票表看起来像下面的表?- J9 r! }8 F. }8 F6 I: X
i_id   c_id   c_name   s_id   s_name0 x' k) w' m, `% p$ l
7208     22   toyota   NULL     NULL9 X- ^( ?1 u2 ?+ g+ h; P$ g2 k, l
7209     23     ford   NULL     NULL- f" f( i& D3 {* D$ w' F; e
7210     27      sun      1     mike; M" k/ h0 u4 e- W
7211     42    apple      2     bill- p3 U. D' W/ z3 h6 F
7212     12   nissan   NULL     NULL4 `* ~8 F- _4 W+ `
7213     15       gm   NULL     NULL
1 C$ T& m( {/ m$ I4 C7214     61   paypal      3      joe9 Q0 \+ [+ _& H! N
也就是说,如何在存在这种关系的地方更新发票表以包含正确的salesperson_id和salesperson_name?
+ O5 ~: [( A) U4 V5 c7 c+ a( a请注意,在存在客户/销售人员关系的情况下,如果该客户有销售人员,则该客户的所有发票都应具有与其相关联的销售人员。
0 C, Q8 z2 L6 f. B谢谢:-)4 y  o3 E  W. e  a/ ^$ A
                - _% \6 X2 X: O2 ^
解决方案:
5 R  U- E8 }! e+ r1 J& t9 j1 N               
* N3 o% `* q/ Z" Z- U0 d) d
6 m) ~5 X# O9 G# E6 z. f# \# O" ]4 p; u( s+ u' j
                使用子查询
8 c7 i9 E& }% l$ W9 U支持最广泛的选项7 Q5 ~. o9 D% Y
UPDATE INVOICES$ m2 u6 s% ]4 _, c1 K' ^
   SET s_id = (SELECT cs.s_id
5 d; E4 R  {" h+ K$ m/ p                 FROM CUSTOMERS_AND_SALES cs" U& l! K; P5 C# {
                WHERE cs.c_id = INVOICES.c_id),: R9 Y) l4 I" Q. U
       s_name = (SELECT cs.s_name$ O$ h' V1 `1 I4 s
                   FROM CUSTOMERS_AND_SALES cs+ Q0 ?6 a: n( e: r0 Y$ B
                  WHERE cs.c_id = INVOICES.c_id)
& V6 `: G/ G$ k0 k! b5 k8 j WHERE INVOICES.c_id IN (SELECT cs.s_id
# Z# N# t  U5 i3 X5 G                           FROM CUSTOMERS_AND_SALES cs). `7 f+ s! ~& d  y$ j
使用联接
, N  x3 D( z6 y/ i! H8 Q, T# e/ u/ T* ~UPDATE INVOICES
3 F! _& b+ r4 |: c9 ^  JOIN CUSTOMERS_AND_SALES cs ON cs.c_id = INVOICES.c_id
" G8 I. X2 {9 c9 S   SET s_id = cs.s_id,
  z* _- e4 J1 Q0 i       s_name = cs.s_name
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则