Първият (и най-очевиден) отговор е да почистите данните, така че да нямате дубликати. Изглежда вероятно предоставените от вас примерни данни да са резултат от грешка.
Що се отнася до merge
оператор, ако данните всъщност са чисто дублирани, можете просто да използвате distinct
:
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'