回答

收藏

如何通过加入选择进行更新

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

如何更新子查询中也存在的表?我必须分两个阶段进行吗?(创建一个临时表-将选定的数据放入其中,然后更新最终表); }0 a7 q% C% p5 a, Y
我正在尝试使用每个CTN的网络标签更新invoiceLine表。
+ r, ^5 ?. N1 b/ _/ X最终结果将是:
7 p9 }. K% L2 R8 P9 G! binvoiceLine
0 ]/ |( I! P- H& o  T% I
1 S  x, w" f5 c7 L: L2 l
ctn       network
' C1 `  }/ k3 V1234      network1
2 u+ B3 H7 s) k# Z2345      network2
5 N2 ?+ f: }0 L. V% a, _3456      network1
8 ^9 c& @( c: z- n, k) o9 X( {3 s+ x* @6 X& I4 m
我有以下表格:& o3 v, |5 h4 x
1 {- Y4 F( n& Q% b% i
invoiceLine" |5 e1 F9 Q3 z' j0 ?5 N. X
ctn       network& K7 d5 I$ u3 F- k4 Y7 O* j' `
1234      null' S6 o# d! o1 R8 w& x& ?( S- L
2345      null. g/ l0 r' f8 t9 l/ {$ E+ ^& m  B
3456      null
; B6 @. I! ?; S( E& I( L3 Y1 S  W5 u: v1 v4 S% r
terminal/ o- F: h! D8 A2 I
ctn       network$ g8 M3 _# Z1 u& ?/ P0 \/ w
1234      1
# v& L0 O# I/ L1 i7 [2345      2
) D6 N: ^; V0 ^" _) }1 {3456      1
9 N" z/ p$ V& ?7 i7 [( O, N
/ n" P& J. X+ P# l6 y! Q9 x( _& ^network
" M; W7 X0 X  {& ^0 q8 Z4 Pid        label+ S, ]+ }& O  r) b. l/ v5 V
1         network1
" T7 t' t% P& N2         network2
, @  ?* |6 Q1 _  u
6 T% t6 T8 B3 b* t2 e, p6 y

5 R3 {. u" f8 ~- E我可以运行一个select,但是我不确定如何通过联接进行更新:
! J# W4 T+ _* b9 Pupdate invoiceLine 2 X& i* ~, r+ K/ x8 N
inner join terminal on terminal.ctn = invoiceLine.ctn
; e- g! B/ P) Fset invoiceLine.network = ( X6 r! t# z' P; v9 D
(8 r' W5 e8 z" b/ b6 x. @
  select network.label % s1 R' i* s1 P* O' ~) }
  from invoiceLine
* j/ S: v7 @1 E, q  inner join terminal on terminal.ctn = invoiceLine.ctn
) C4 h7 ?. ~3 G5 [' j2 F  inner join network on network.id = terminal.network1 T' K' ]5 b& L5 g3 g8 |
) 0 [: }7 |7 ~+ k5 ^. q# w
where invoiceLine.ctn = terminal.ctn
" D) k) T: u* A' Z但是MySQL抛出一个. \8 L, M/ I! C9 t
' p$ h' E/ j# z
错误代码:1093。您无法在FROM子句中指定目标表’invoiceLine’进行更新. S6 X2 e# ^8 ]0 s) B7 I& n5 r
5 y; j$ N/ m8 A! E2 y2 X
                  V' d6 N% x" R% O8 e# u; h( T
解决方案:2 D9 f. f' X. J
                2 Y2 _6 g4 ]8 d. i$ c
6 U6 ]0 U4 w& J# d( }# p+ u4 D, M& T
. _- M& u) I# C, Y
                UPDATE invoiceLine( {' e0 \: L9 [8 a* e
        INNER JOIN terminal6 Z7 Y3 E; s% |4 C! K
            ON invoiceLine.ctn = terminal.ctn
+ p9 N+ Q) ]" _5 t2 K        INNER JOIN network6 y( A0 J  V# }* Y4 I3 X: u
            ON terminal.network = network.id0 M2 ?3 R5 N4 j8 \8 o& O2 U
        SET invoiceLine.network = network.label
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则