Okej, så här är vad jag skulle rekommendera. Du vill ändra din where-sats för att endast ange dubbletterna. Dessutom vill du egentligen bara titta på de aktiva posterna eftersom det inte spelar någon roll om det finns dubbletter av inaktiva poster.
För att se om det finns en dubblett kan du använda en exists
. För att använda existensen kommer vi först att skriva en underfråga för att dra tillbaka dubbletter av poster, aka allt med samma för- och efternamn, ett annat id, och är också aktivt. Om underfrågan drar tillbaka något kommer exists att returnera sant och vi kommer att uppdatera posten. Om det inte finns några dubbletter kommer underfrågan inte att ta några poster och existensen kommer att returnera false. Då kommer vi inte att uppdatera posten.
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)