最初の(そして最も明白な)答えは、重複がないようにデータをクリーンアップすることです。ご提供いただいたサンプルデータはバグの結果である可能性があります。
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'