Mysql
 sql >> Database >  >> RDS >> Mysql

Aggiornamento di pulizia per voci duplicate

Ok, ecco cosa consiglierei. Vuoi cambiare la tua clausola where per specificare solo i duplicati. Inoltre, vuoi solo guardare i record attivi perché non importa se ci sono duplicati di record inattivi.

Per vedere se c'è un duplicato, puoi usare un exists . Per utilizzare esiste, per prima cosa scriveremo una sottoquery per recuperare i record duplicati, ovvero qualsiasi cosa con lo stesso nome e cognome, un ID diverso ed è anche attiva. Se la sottoquery recupera qualcosa, esiste restituisce true e aggiorneremo il record. Se non ci sono duplicati, la sottoquery non acquisirà alcun record e l'exist restituirà false. Quindi, non aggiorneremo il record.

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)