2016-11-01 19 views
1

私は2つのテーブルを持っており、レコードをマージする必要があります。2つのテーブルをマージしてそれぞれ挿入/更新します

ソース:

ID seq name designation company 
001 1 aaa  Developer  YYY 
001 2 aaa  lead  yyy 
002 1 mmm  consultant  bbb 
003 1 ppp  developer  yyy 
003 2 ppp  lead   yyy 
003 3 ppp  manager  yyy 

対象:

ID seq name designation company 
001 1 aaa  Developer  YYY 
001 2 aaa  lead  yyy 
002 1 mmm  consultant  bbb 
003 1 ppp  developer  yyy 
003 2 ppp  lead   yyy 
003 3 ppp  manager  yyy 

私は/更新レコードを挿入するためにマージ書きたいと思います。私のキー列はIDとseqの両方であり、複合主キーです。 一般的に、私たちが取得する更新記録です。たとえば、ID 001には2つのレコードがあります。 ID 001がシーケンス3の別のレコードを取得した場合、このレコードはターゲットに挿入されます。

私のソースは今 ソースがある場合:

ID seq name designation company 
001 1 aaa  Developer  YYY 
001 2 aaa  lead   yyy 
001 3 aaa  manager  yyy 
002 1 mmm  consultant  bbb 
003 1 ppp  developer  yyy 
003 2 ppp  lead   yyy 
003 3 ppp  manager  yyy 

ターゲットを次のようになります。 対象:

ID seq name designation company 
001 1 aaa  Developer  YYY 
001 2 aaa  manager  yyy 
001 3 aaa  manager  yyy 
002 1 mmm  consultant  bbb 
003 1 ppp  developer  yyy 
003 2 ppp  lead   yyy 
003 3 ppp  manager  yyy 

私は以下のマージをしようとしていますし、それは私のために働いていません。

MERGE target t 
using source s 
on s.ID=t.ID and s.seq=t.seq 
when not matched 
then 
Insert 
(
ID, 
seq, 
name, 
designation, 
company 
) 
Values 
(
s.ID, 
s.seq, 
s.name, 
s.designation, 
s.company 
) 
when matched 
then 
update 
set 

name=s.name, 
designation=s.designation, 
company=s.company 
; 

どこが間違っているのか教えていただけますか?

MERGE TABLE1 AS TARGET 
USING TABLE2 AS SOURCE 
ON (SOURCE.ID = TARGET.ID AND SOURCE.seq = TARGET.seq) 

WHEN MATCHED THEN 
UPDATE SET 
name=SOURCE.name, 
designation=SOURCE.designation, 
company=SOURCE.company 

WHEN NOT MATCHED BY TARGET THEN 
INSERT(ID,seq,name,designation,company) 
VALUES(SOURCE.ID,SOURCE.seq,SOURCE.name,SOURCE.designation,SOURCE.company) 

--If You want to delete rows found in TARGET and not found in SOURCE add the following line 

WHEN NOT MATCHED BY SOURCE THEN 
DELETE 
: 任意のヘルプは、あなただけの次のクエリを試してみてください NOT MATCHED BY TARGET

を指定する必要が

答えて

0

を高く評価しています
関連する問題