Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Atualização de limpeza para entradas duplicadas


Ok, então aqui está o que eu recomendaria. Você deseja alterar sua cláusula where para especificar apenas as duplicatas. Além disso, você realmente só quer ver os registros ativos porque não importa se há duplicatas de registros inativos.

Para ver se há uma duplicata, você pode usar um exists . Para usar o existe, primeiro vamos escrever uma subconsulta para recuperar registros duplicados, também conhecido como qualquer coisa com o mesmo nome e sobrenome, um id diferente e também ativo. Se a subconsulta puxar algo de volta, existe retornará true e atualizaremos o registro. Se não houver duplicatas, a subconsulta não capturará nenhum registro e o existente retornará false. Então, não atualizaremos o 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)