Det første (og mest oplagte) svar er at rydde op i dataene, så du ikke har dubletter. Det virker sandsynligt, at de eksempeldata, du har angivet, er resultatet af en fejl.
Hvad angår merge
sætning, hvis dataene rent faktisk er duplikeret, kan du bare bruge 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'