Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Bereinigungsupdate für doppelte Einträge

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)