Det första (och mest uppenbara) svaret är att rensa upp data så att du inte har dubbletter. Det verkar troligt att exempeldatan du angav är resultatet av en bugg.
När det gäller merge
uttalande, om data faktiskt är rent duplicerade kan du bara använda 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'