D'accord, alors voici ce que je recommanderais. Vous souhaitez modifier votre clause where pour spécifier uniquement les doublons. En outre, vous ne souhaitez vraiment consulter que les enregistrements actifs, car peu importe s'il existe des doublons d'enregistrements inactifs.
Afin de voir s'il y a un doublon, vous pouvez utiliser un exists
. Afin d'utiliser l'existe, nous allons d'abord écrire une sous-requête pour extraire les enregistrements en double, c'est-à-dire tout ce qui a le même prénom et le même nom, un identifiant différent, et qui est également actif. Si la sous-requête récupère quelque chose, exists renverra true et nous mettrons à jour l'enregistrement. S'il n'y a pas de doublons, la sous-requête ne saisira aucun enregistrement et l'existe renverra faux. Ensuite, nous ne mettrons pas à jour l'enregistrement.
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)