Câu trả lời đầu tiên (và rõ ràng nhất) là làm sạch dữ liệu để bạn không có các bản sao. Có vẻ như dữ liệu mẫu bạn cung cấp là kết quả của một lỗi.
Đối với merge
câu lệnh, nếu dữ liệu thực sự hoàn toàn được sao chép, bạn chỉ có thể sử dụng 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'