Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mise à jour de nettoyage pour les entrées en double

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)