sql >> Base de Datos >  >> RDS >> Mysql

Actualización de limpieza para entradas duplicadas

Bien, esto es lo que recomendaría. Desea cambiar su cláusula where para especificar solo los duplicados. Además, realmente solo desea ver los registros activos porque no importa si hay duplicados de registros inactivos.

Para ver si hay un duplicado, puede usar exists . Para usar existe, primero vamos a escribir una subconsulta para recuperar registros duplicados, es decir, cualquier cosa con el mismo nombre y apellido, una identificación diferente y que también esté activa. Si la subconsulta extrae algo, existe devolverá verdadero y actualizaremos el registro. Si no hay duplicados, la subconsulta no tomará ningún registro y el valor existente devolverá falso. Entonces, no actualizaremos el registro.

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)