Het eerste (en meest voor de hand liggende) antwoord is om de gegevens op te schonen, zodat je geen dubbele gegevens hebt. Het lijkt waarschijnlijk dat de voorbeeldgegevens die je hebt verstrekt het resultaat zijn van een bug.
Wat betreft de merge
statement, als de gegevens echt puur gedupliceerd zijn, kun je gewoon distinct
. gebruiken :
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'