2016-11-01 6 views
1

Ich habe zwei Tabellen und ich muss die Datensätze zusammenführen.Zusammenführen von zwei Tabellen und Einfügen/Aktualisieren

Quelle:

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 

Ziel:

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 

I/Update Aufzeichnungen schreiben wollen fusionieren einzufügen. Meine Schlüsselspalten sind ID und seq beide. Sie sind zusammengesetzte Primärschlüssel. im Allgemeinen ist es ein Update-Datensatz, den wir bekommen. Zum Beispiel hat ID 001 zwei Datensätze in der Quelle. Wenn ID 001 einen weiteren Datensatz mit Sequenz 3 erhält, sollte dieser Datensatz als Einfügung in das Ziel gehen.

wenn meine Quelle hat jetzt Quelle:

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 

dann sollte sein Ziel: Ziel:

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 

ich mit unten merge versuchen und es funktioniert nicht für mich.

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 
; 

Können Sie mir bitte sagen, wo ich falsch liege? jede Hilfe ist

geschätzt

Antwort

0

Sie NOT MATCHED BY TARGET

Probieren Sie die folgende Abfrage angeben müssen:

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 
Verwandte Themen