回答

收藏

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

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

我编写了一个查询,返回了将 Customer和Salespeoeple 关联的行。3 a7 z+ k# t! ?! Q
请注意,查询将联接多个数据库表。请注意,并非所有客户都有销售人员。
8 `2 P5 D1 d0 g8 ^8 ^c_id     c_name   s_id   s_name8 y9 x% ]. r4 _3 ^% J" T5 B. c, z
  24  microsoft      1     mike( O0 f/ q( k6 r+ Y
  27        sun      1     mike
, F9 m2 ~0 {( F- g5 J: C" G  42      apple      2     bill: Q, b  }0 j, F6 d/ E4 ~, S4 x
  44     oracle      1     mike+ E" f' l& b7 d5 `. W
  47        sgi      1     mike
5 ~! F7 J1 w$ i3 u  58       ebay      2     bill6 v3 s! M+ n) r$ b% h
  61     paypal      3      joe% r& Z4 N- n9 s' {% d/ x1 E  y
  65     redhat      1     mike
8 ?7 |  i2 ]& n0 }我的数据库中也只有一个表(称为 发票 ),如下所示。
8 ^/ a6 w' k9 s7 ti_id   c_id   c_name   s_id   s_name2 Z' G8 l3 T' m# \6 V
7208     22   toyota   NULL     NULL" N. }; r- _/ l7 O* T
7209     23     ford   NULL     NULL
0 A2 j& z; k: t- R7 u, a8 V9 A7210     27      sun   NULL     NULL- M! c) ^6 X6 h% T7 G5 B/ U. }
7211     42    apple   NULL     NULL+ L. O9 o* a4 [6 p: T8 ^7 L! S9 u
7212     12   nissan   NULL     NULL
9 g4 }3 N( I8 j4 L7213     15       gm   NULL     NULL8 e3 ]# i" M+ d2 d7 y
7214     61   paypal   NULL     NULL
! n9 a; R! p  m5 A6 U. t如何在MySQL中使用UPDATE来使我的发票表看起来像下面的表?8 V! B% x: L4 G( r# _) B; k; H; O
i_id   c_id   c_name   s_id   s_name
" Z8 \' N0 M# V( H7208     22   toyota   NULL     NULL
* Z0 \; I, ~; W$ ?7209     23     ford   NULL     NULL
& r% H  B! ]! T# l" B3 F2 C7210     27      sun      1     mike
% w% N& Z3 g+ R, z6 R( j7211     42    apple      2     bill
1 a8 Y* H/ V$ A" c7212     12   nissan   NULL     NULL
3 \( f- D. k. a/ _6 w7213     15       gm   NULL     NULL
/ R2 \+ o6 d; G) G3 \6 `7 [2 H7214     61   paypal      3      joe
: J; W( r$ m7 i$ F; k也就是说,如何在存在这种关系的地方更新发票表以包含正确的salesperson_id和salesperson_name?  G' ~. ^/ b: D4 g4 |, z
请注意,在存在客户/销售人员关系的情况下,如果该客户有销售人员,则该客户的所有发票都应具有与其相关联的销售人员。4 F; y6 c/ O+ \# Q
谢谢:-)
5 _( C3 p  J8 `% G+ U# P3 ^                & W0 e+ N# r/ ^; h$ d) A
解决方案:
% z4 _& @# C) U6 ^; k' m                ( ~+ b; w( }: ^! f9 T. D7 C4 B

3 V' m9 u! [8 R* A, r7 @' V& ]$ F+ G: g% l# |4 H
                使用子查询9 D& W0 [0 p2 K, y7 \
支持最广泛的选项' x# G* Y  e: V# q. |
UPDATE INVOICES
4 Z$ [! V  w4 S* R% B( e6 i; B   SET s_id = (SELECT cs.s_id4 K* O4 ]# K% n0 f% _) q, v: X+ k
                 FROM CUSTOMERS_AND_SALES cs% w$ n  @" V5 C8 q8 J
                WHERE cs.c_id = INVOICES.c_id),$ P. h; G: m% ?/ @3 \6 ~6 d
       s_name = (SELECT cs.s_name
4 e9 d2 M: b4 X/ X1 O7 z                   FROM CUSTOMERS_AND_SALES cs
7 O  b9 V2 ~, U& O7 Q  ?7 B2 b2 w                  WHERE cs.c_id = INVOICES.c_id); s3 F+ @# i& S. U4 h; d: s
WHERE INVOICES.c_id IN (SELECT cs.s_id
/ u0 ]# n& X& e: [* U( }                           FROM CUSTOMERS_AND_SALES cs)
- `  I/ Z  l( z4 X: B8 y, n7 T使用联接8 V( Y- {: _, ]6 v2 q! o: k9 w' C. u
UPDATE INVOICES; c& J# L( _" L' `1 ]5 d  l
  JOIN CUSTOMERS_AND_SALES cs ON cs.c_id = INVOICES.c_id7 G7 j! E" L( q6 W
   SET s_id = cs.s_id,. c) W; d$ p; \* Q/ e
       s_name = cs.s_name
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则