Oké, dus dit is wat ik zou aanraden. U wilt uw waar-clausule wijzigen om alleen de duplicaten op te geven. Bovendien wilt u eigenlijk alleen naar de actieve records kijken, omdat het niet uitmaakt of er duplicaten zijn van inactieve records.
Om te zien of er een duplicaat is, kunt u een exists
. gebruiken . Om de bestaande te gebruiken, gaan we eerst een subquery schrijven om dubbele records terug te halen, oftewel alles met dezelfde voor- en achternaam, een andere id, en is ook actief. Als de subquery iets terughaalt, zal exist true retourneren en zullen we de record bijwerken. Als er geen duplicaten zijn, zal de subquery geen records ophalen en zal het bestaan false retourneren. Dan zullen we het record niet bijwerken.
update u
set active = 0
From UserInfo u
where (SELECT count(*)
FROM UserRecords recs
where recs.UserId= u.UserId) = 0
and u.active = 1
and exists (Select 1
From UserInfo u2
Where u2.lastname = u.lastname
and u2.firstname = u.firstname
and u2.userid <> u.userid
and u2.active = 1)