2016-07-21 16 views
0

Ich habe eine Zieltabelle, die UserId, ItemId und SomeData haben. Ich habe eine Quellentabelle, die ich verwenden möchte, um das Ziel basierend auf fehlender ItemId zu aktualisieren.SQL-Merge, wenn ich zwei Spalten übereinstimmen muss

Vielleicht leichter erklärt in einem Beispiel ...

Dies ist das Ziel und die vorhandenen Daten:

UserId ItemId SomeData 
1  1  x 
2  2  y 
2  3  z 

Und ich habe eine andere temporäre Quelltabelle, die einige ItemId für einen bestimmten Benutzer hält. Wenn diese UserId diese ItemId bereits hat, ignoriere sie. Wenn nicht, füge es hinzu.

UserId ItemId SomeData 
1  1  x  <--- this ItemId already exist for UserId=1, ignore 
1  2  a  <--- the next two ItemId don't exist for UserId=1, add them 
1  3  b 

Ergebnismenge Ich erwarte ist wie folgt:

UserId ItemId SomeData 
    1  1  x 
    2  2  y 
    2  3  z 
    1  2  a <--- added 
    1  3  b <--- added 

ich mit der richtigen Art und Weise bin kämpfen, um die Tabelle in dem Merge-Befehl zu verbinden, so dass ich die fehlenden ItemId Datensätze einfügen kann der Benutzer.

MERGE Target T 
USING Source S 
ON T.UserId = S.UserId --This doesn't get the right matches but neither does joining it by ItemId 
WHEN NOT MATCHED 
    THEN 
    INSERT bah bah bah 

Wie kann ich das tun?

+2

Wenn Sie sich für 'Userid' und' Itemid' interessieren, fügen Sie sie beide zu Ihrer 'ON'-Sektion hinzu:' T.UserId = S.UserId UND T.ItemID = S.ItemID' –

Antwort

1
MERGE INTO @tb AS T 
USING @tmpTb AS S 
    ON T.userId = S.userId AND T.itemId = S.itemId 
WHEN NOT MATCHED THEN 
    INSERT (userId, itemId, someData) 
    VALUES (S.userId, S.itemId , S.someData); 

Hier @tb ist Zieltabelle und @tmpTb ist Quelltabelle.

1

Fügen Sie einfach ItemId der Bedingung

MERGE Target T 
USING Source S 
ON (T.UserId = S.UserId AND T.ItemId = S.ItemId) 
WHEN NOT MATCHED 
    THEN 
    INSERT bah bah bah 
0

Dies wird Ihnen helfen, ... von UNION mit zwei Tabellen ohne Duplikate zusammenführen können .Bei mit UNION alle Duplikate werden auch vorhanden sein.

insert into Result_Table 
    select UserId,ItemId,SomeData from table_one 
    union 
    select UserId,ItemId,SomeData from table_two 
Verwandte Themen