W porządku, więc oto co polecam. Chcesz zmienić klauzulę where, określając tylko duplikaty. Poza tym naprawdę chcesz przeglądać tylko aktywne rekordy, ponieważ nie ma znaczenia, czy istnieją duplikaty nieaktywnych rekordów.
Aby sprawdzić, czy istnieje duplikat, możesz użyć exists
. Aby użyć istnieje, najpierw napiszemy podzapytanie, aby wycofać zduplikowane rekordy, czyli wszystko, co ma to samo imię i nazwisko, inny identyfikator i jest również aktywne. Jeśli podzapytanie coś cofa, istnieje zwróci true i zaktualizujemy rekord. Jeśli nie ma duplikatów, podzapytanie nie pobierze żadnych rekordów, a istniejące zwróci false. Wtedy nie zaktualizujemy rekordu.
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)