在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/ }... |
|
|
|
|
|