回答

收藏

从另一表更新并插入到一个表

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

我有两个表:% k/ k- d, F! T9 P  l8 w  n
table1:(ID,代码,名称)/ N# G' s/ i& C- E5 k6 {
table2:( ID,代码,名称)具有相同的列( I' t2 g. |( t! Z* v6 h- ~9 o
我想将数据从表1插入表2或更新表2中存在的列(表1.ID =表2.ID)
: x6 S: E8 K/ n简单的方法是什么?
# f9 j- x! F% N2 i: T  Q合并  p* H3 }/ p( `1 P/ Y- Q# w0 [
                4 A9 R2 w4 e! ~# w" H9 q: H. W" v4 Q3 F
解决方案:
) n* e  q) y- h4 z! E               
7 W" k$ O4 m: y, [' y# x8 f) e# d9 f" [2 Q# c2 p

, q2 w3 R) G' B                Merge table2 as target
) q7 R( S$ |/ M! t$ J2 w    using table1  as source) I6 B+ _$ Q; ]
    on0 }, |* f* O( M, l1 Y
    target.id=source.id; Y) z2 K6 `- k
    When matched 1 L3 }$ {/ q) C4 c& x
    Then( `7 d! X3 ]) m$ f
    update
9 s8 b- s7 N  k    set target.id=source.id,
, n  b, Y/ M4 v3 `4 `. ?        target.name=source.name
' u; a  ]7 {$ F# s7 x# m& ~) E    When not matched by Target Then
* [# l& O8 @4 M1 P    INSERT (id, name) VALUES (id, name);
/ [! D$ S+ U5 aMerge语句存在一些问题,因此应谨慎使用..
% W9 w" A- m' C% y% b5 y此外,我建议使用合并作为两个单独的DML语句,如下所示。
  d& F$ D0 O. tinsert into table2: G0 @1 K; n" X" _5 j. @. W2 g
select * from table1 t1 where not exists (select 1 from table2 t2 where t2.id=t1.id). {" M: B1 d: H6 N1 w
update t2, g* }2 c$ a+ l, b, l: E0 B( p# m, K3 C
set ( h/ f& B* y) ^3 N/ i# [
t2.id=t1.id,
+ r5 _7 ?, z/ Z1 lt2.name=t1.name: M+ `+ T9 ^/ O4 f- N
from
9 e; g; H3 p$ Q% Z8 gtable1 t1
0 t1 v2 }3 b, ljoin* |2 G  _: M. V# L
table2 t2" O! d+ w, ?( a  a: ]* R
on t1.id=t2.id
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则