回答

收藏

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

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

我编写了一个查询,返回了将 Customer和Salespeoeple 关联的行。0 B: [& Y7 W* r- U& q3 i
请注意,查询将联接多个数据库表。请注意,并非所有客户都有销售人员。
4 _8 L; O7 Z( }8 Wc_id     c_name   s_id   s_name
. U/ \4 D2 c$ @; u  24  microsoft      1     mike9 i5 S- m% I; v0 l# \2 B* d( `
  27        sun      1     mike
& h  L1 o! o; J2 }) G& C3 z  42      apple      2     bill% ^- i2 t3 s( E( k2 e5 o( _
  44     oracle      1     mike
0 a+ a) M4 z7 S% Z  K  47        sgi      1     mike
; i/ X( g1 L- l, |/ {/ W4 r  58       ebay      2     bill
$ D3 Z% Q/ _: E  F% Y% U7 z/ |  61     paypal      3      joe  d( R: F" M& o6 R0 p
  65     redhat      1     mike" ~5 O9 q: j- c( N' }! d; i
我的数据库中也只有一个表(称为 发票 ),如下所示。' E5 H7 z. h7 G6 Q1 O
i_id   c_id   c_name   s_id   s_name7 Q3 ?$ z) U. c/ N
7208     22   toyota   NULL     NULL* U; @9 f2 y8 p6 d% W
7209     23     ford   NULL     NULL
7 I! T9 r9 a5 l+ C, C$ x; J7210     27      sun   NULL     NULL
+ _# r/ M! N  \" ]' v! M7211     42    apple   NULL     NULL7 l1 A4 Q* Z, c. O( D* R* h
7212     12   nissan   NULL     NULL& T: H3 y; F3 d4 p
7213     15       gm   NULL     NULL
  [! i/ o+ A8 p7214     61   paypal   NULL     NULL
, L' x2 N4 f% r% G4 w# q如何在MySQL中使用UPDATE来使我的发票表看起来像下面的表?
  ?( e' `3 q/ Pi_id   c_id   c_name   s_id   s_name
% e6 s% C+ n' j! \7208     22   toyota   NULL     NULL
, _; q! e/ ~$ J. w; R3 i6 i) L& d7209     23     ford   NULL     NULL1 _: o4 @6 E5 U5 W* J- R6 Y7 Q
7210     27      sun      1     mike
% k$ m" y/ d. c, y* ]* o7211     42    apple      2     bill
9 f- {5 t7 ^- X+ \0 E( n7212     12   nissan   NULL     NULL
+ i+ P0 ~3 _) Q7213     15       gm   NULL     NULL
: X) t3 c" A4 [5 ^- m3 |+ f7214     61   paypal      3      joe
( r: {4 Y/ M' `9 K+ n- `也就是说,如何在存在这种关系的地方更新发票表以包含正确的salesperson_id和salesperson_name?+ w8 k# H# p6 S7 p
请注意,在存在客户/销售人员关系的情况下,如果该客户有销售人员,则该客户的所有发票都应具有与其相关联的销售人员。
) C5 G8 N" x$ B" {' w谢谢:-)
2 t0 m; A9 c" h9 L2 {* [% X* a               
% y3 u: p! W$ Z6 I2 r9 X6 U* Q! Z% y解决方案:
" I0 p4 i) M6 _/ Y1 w( V3 I               
; b7 q% ~, {' a4 J+ {4 c* q. X! w. D. o' d6 q1 C$ G. g8 ]

: M# k: I6 `, q/ Q- T9 x                使用子查询
. `5 |8 g& F) @- M) C1 d支持最广泛的选项
  S( x( f4 m+ O3 n/ Y/ ^- UUPDATE INVOICES' V; G5 V( s% C* `* R' A
   SET s_id = (SELECT cs.s_id: E. p( e  S3 {3 P% K/ d
                 FROM CUSTOMERS_AND_SALES cs
3 i3 G/ V- W1 E                WHERE cs.c_id = INVOICES.c_id),
! r2 Z" b9 v  ^) L( }       s_name = (SELECT cs.s_name3 M7 S; |+ K% _/ F3 L$ w2 l" q! ^
                   FROM CUSTOMERS_AND_SALES cs4 t4 y2 S0 C! L( n8 d" [
                  WHERE cs.c_id = INVOICES.c_id)6 ^+ v2 p1 D; {6 e$ J/ P( Y0 H
WHERE INVOICES.c_id IN (SELECT cs.s_id
- S5 B! X. t5 a/ h$ h$ I8 d                           FROM CUSTOMERS_AND_SALES cs)1 Z" y% |- a) F
使用联接2 ?2 t' }) J' X0 [( e. x* r  d8 ?
UPDATE INVOICES- t9 }' B& R. ?3 [
  JOIN CUSTOMERS_AND_SALES cs ON cs.c_id = INVOICES.c_id
( G6 j! L/ [; y9 h8 g( w   SET s_id = cs.s_id,
. q2 F/ g( H, _: v9 |+ P       s_name = cs.s_name
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则