Die erste (und offensichtlichste) Antwort ist, die Daten zu bereinigen, damit Sie keine Duplikate haben. Es ist wahrscheinlich, dass die von Ihnen bereitgestellten Beispieldaten das Ergebnis eines Fehlers sind.
Was das merge
betrifft -Anweisung, wenn die Daten tatsächlich rein dupliziert sind, können Sie einfach distinct
verwenden :
MERGE INTO maintable pr
USING (SELECT DISTINCT contract,
membertype,
address1,
city,
state,
zipcode,
countrycode
FROM incrementaltable pra
WHERE pra.membertype = 'Parent')
ON (pr.contract = pra.contract)
WHEN MATCHED THEN
UPDATE SET pr.address1 = pra.address1,
pr.city = pra.city,
pr.state = pra.sate,
pr.zipcode = pra.zipcode,
pr.countrycode = pra.countrycode
WHERE address1 IS NULL AND pr.membertype <> 'Parent'