回答

收藏

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

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

我编写了一个查询,返回了将 Customer和Salespeoeple 关联的行。
( U" [2 e1 G5 |5 M- m9 Z请注意,查询将联接多个数据库表。请注意,并非所有客户都有销售人员。2 s. `4 T  p# y- e! {4 p
c_id     c_name   s_id   s_name  @# O+ Q  i; {( k
  24  microsoft      1     mike
/ g  P+ \2 |! }' o  27        sun      1     mike
+ D5 j) Q# H8 {. K" d* V# s9 G9 C  42      apple      2     bill
9 s* V. a6 s' Q1 Q  44     oracle      1     mike' J' h$ i6 v. a0 i2 ~( N2 _( {+ D% @
  47        sgi      1     mike/ Y" a! q$ T# [- A% d8 L" N( |, s
  58       ebay      2     bill
5 `7 l; X, v8 E# b5 a" {2 o# Q  61     paypal      3      joe
  x, H- l0 r3 E* s& n' v  65     redhat      1     mike
) P* h9 f" R6 X1 y/ A, q" d# m* k我的数据库中也只有一个表(称为 发票 ),如下所示。
7 F6 k" }* }- I2 u# m- Ui_id   c_id   c_name   s_id   s_name: g+ {9 @4 d$ o7 T7 `* g7 v$ @0 S
7208     22   toyota   NULL     NULL
9 `9 t: G' y+ P# T* C" \7209     23     ford   NULL     NULL
+ D! n! ?/ T& l0 U8 K4 h7210     27      sun   NULL     NULL
! U' u4 l) ^5 Z4 R5 x% q- V4 @7211     42    apple   NULL     NULL% r* V( }9 P+ J  j  e
7212     12   nissan   NULL     NULL
3 j% N" P- p5 U* `. f7213     15       gm   NULL     NULL# c" M; Z% C) Y. I4 J' Y
7214     61   paypal   NULL     NULL
7 Q* i1 v8 A' V; c如何在MySQL中使用UPDATE来使我的发票表看起来像下面的表?9 r+ |0 ~5 `4 y" }8 s+ G/ ~' T* q
i_id   c_id   c_name   s_id   s_name
; ]+ m9 d. M' ?, Y3 Q7208     22   toyota   NULL     NULL8 f; W1 `- J% i  z# y5 S/ H
7209     23     ford   NULL     NULL  s% j/ Y( L# b: h: H% A
7210     27      sun      1     mike% z8 m, v5 U1 D5 m; U) {
7211     42    apple      2     bill
. \5 a- A# w& P4 d/ [1 ^, j7212     12   nissan   NULL     NULL
0 ?. j8 _7 Y* F3 {# G7213     15       gm   NULL     NULL7 J- o$ i0 _+ ?( @1 v# A
7214     61   paypal      3      joe
: E3 i" ?/ U5 }+ q0 |* o: ~- ^也就是说,如何在存在这种关系的地方更新发票表以包含正确的salesperson_id和salesperson_name?- s5 Q3 k4 k% O
请注意,在存在客户/销售人员关系的情况下,如果该客户有销售人员,则该客户的所有发票都应具有与其相关联的销售人员。* n9 b8 _# ^" a' {; X8 w0 D3 x
谢谢:-)( Z) d4 I4 P3 a: J5 F
                7 R) W2 ]& V- w6 @
解决方案:
' d! X8 @3 e2 p+ f. I7 Y               
: \; v8 h' m( |; R4 d0 {3 {* `$ c) r0 g# s3 t4 l2 j7 c/ j5 I( r0 i5 H7 `

/ m) v/ i! k4 ~! Z, `                使用子查询
7 h# t) r; D7 e支持最广泛的选项3 y8 \  e& ~2 e4 H/ }
UPDATE INVOICES
5 Y& y) e3 b  G0 z3 W" ^2 y   SET s_id = (SELECT cs.s_id
# n: j0 F. j- u                 FROM CUSTOMERS_AND_SALES cs
* k! X- j  r' m! e                WHERE cs.c_id = INVOICES.c_id),
, |; j: Z; ?& _5 r: A3 S       s_name = (SELECT cs.s_name
, k& i. S+ G( u                   FROM CUSTOMERS_AND_SALES cs0 r; @  H8 O  N) B3 E
                  WHERE cs.c_id = INVOICES.c_id)
' [: S8 k* O! K WHERE INVOICES.c_id IN (SELECT cs.s_id) Y& i) f5 B+ L' x1 d; \+ T
                           FROM CUSTOMERS_AND_SALES cs)
) E" ~0 R) o9 T2 B1 G+ W+ y使用联接
8 U: `% b7 N9 Q0 p1 _( MUPDATE INVOICES4 |  e) r6 z. g* x9 C$ |( \
  JOIN CUSTOMERS_AND_SALES cs ON cs.c_id = INVOICES.c_id  k$ p! H# r+ ^. V
   SET s_id = cs.s_id,0 S& u/ g( \- Q- r* H& T$ P
       s_name = cs.s_name
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则