Okay, also hier ist, was ich empfehlen würde. Sie möchten Ihre where-Klausel ändern, um nur die Duplikate anzugeben. Außerdem möchten Sie wirklich nur die aktiven Datensätze ansehen, da es keine Rolle spielt, ob es Duplikate von inaktiven Datensätzen gibt.
Um zu sehen, ob es ein Duplikat gibt, können Sie einen exists
verwenden . Um die vorhandenen zu verwenden, schreiben wir zuerst eine Unterabfrage, um doppelte Datensätze zurückzuziehen, auch bekannt als alles mit demselben Vor- und Nachnamen, einer anderen ID und auch aktiv. Wenn die Unterabfrage etwas zurückzieht, gibtexists true zurück und wir aktualisieren den Datensatz. Wenn es keine Duplikate gibt, greift die Unterabfrage keine Datensätze und das Existent gibt falsch zurück. Dann werden wir den Datensatz nicht aktualisieren.
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)