回答

收藏

在Oracle SQL的MERGE语句中为INSERT / UPDATE添加条件

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

我必须在表target_table中插入/更新一些记录。这些记录是一个source_table。
$ b; T7 N/ E8 F5 X1 h1 N9 M我正在使用MERGE更新/插入target_table。! O4 s$ u/ Y' p0 I1 W
MERGE8 A- P4 Y: v5 ~. l1 a
   INTO  target_table tgt
/ f9 S* m- _/ o. S# ]" ?2 w( U   USING source_table src3 h9 X) R( D0 y; V9 _# x
   ON  ( src.column1 = tgt.column1 and& i" @. Y" p- `( H
         src.column2 = tgt.column2)5 j& g$ Q/ Z1 c- r* i3 n; Z
WHEN MATCHED5 S; \" R/ o# s
THEN
$ n( o3 c- m- @1 ^) ]   UPDATE$ ~+ n5 k4 P% f+ O$ p+ I
   SET   tgt.column3= src.column3,9 n5 I4 C9 H6 V
         tgt.column4 = src.coulmn4   
) g+ h6 k# P% z  sWHEN NOT MATCHED
; T; ?: m8 f  F4 y. e1 q   THEN0 L8 b4 d0 J. O: |4 s$ M
INSERT ( tgt.column1,
; C/ X# q  U6 j1 R. a0 X         tgt.column2,5 q( q* M& l" i) t: Q% Z# E
         tgt.column3,
/ |* ?# C* s+ z8 z6 o+ p: B         tgt.column4 )
! V! a2 W+ d/ RVALUES ( src.coulmn1,
  K. p3 _& F8 J/ q! B/ X         src.coulmn2,' N% J1 _7 T5 Y+ i5 R, L9 O
         src.coulmn3,
) V3 j8 A8 Z" g( y; e: u) K6 N         src.coulmn4);7 _' e+ }; L& ?  f
我想在更新中添加一些特定条件。) Q% o: X% z9 C( U: ]1 O: }: L2 D. B
IF target_table.column3 in (val1','val2)
, R2 h0 n  l1 L) Y" ]那么就应该只有更新,否则就没有更新或插入。/ ?3 ]2 v2 A3 G
                / _, ]/ W8 `. J5 Q
解决方案:6 S! Y1 r! q  E7 C& v, o; a. Z
               
8 i: x) E: H3 Z8 E  A, c2 ?  ^
; f, K8 V: K0 Z3 d0 e; B8 h* |- }" R
                您可以简单地在中添加WHERE子句UPDATE。在oracle) H) `0 L8 p9 J3 f
docs中有更多关于它的信息。6 T. a" n7 x$ h) _
因此,在您的情况下,它应如下所示:/ p& n$ ^) N1 k2 ]8 y; K8 M. Q
...
4 t+ E6 ^. P; U& ^WHEN MATCHED$ W! r  R& w; o
THEN  `0 m; v" ^, H: j
   UPDATE
& o% ?) y$ }6 }5 q# U& f, @) P   SET   tgt.column3= src.column3,+ a) e  G8 O% F# K. E( A
         tgt.column4 = src.coulmn4
. K2 w. [6 j: v8 n6 X1 r! R( f   WHERE tgt.column3 IN (val1, val2)
% D- v4 @0 ^5 ?, Z5 qWHEN NOT MATCHED
4 G! J+ b7 J+ W+ V/ }...
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则