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

Qual é a melhor maneira de excluir valores duplicados da tabela MySQL?


Primeiro, você pode tentar adicionar índices aos campos ProgramName e CustID se ainda não os tiver.

Desduplicação

Você pode agrupar seus registros para identificar dupes e, ao fazer isso, pegue o valor mínimo de ID para cada grupo. Em seguida, basta excluir todos os registros cujo ID não seja um dos MinID's.

Método na Cláusula
delete from
 ProgramsList
where
 id not in 
    (select min(id) as MinID
      from ProgramsList
      group by ProgramName, CustID) 

Método de junção

Você pode ter que executar isso mais de uma vez, se houver muitos membros por grupo.
DELETE P
FROM ProgramsList as P
INNER JOIN 
    (select count(*) as Count, max(id) as MaxID
     from ProgramsList
     group by ProgramName, CustID) as A on A.MaxID = P.id
WHERE A.Count >= 2

Algumas pessoas têm problemas de desempenho com o In-Clause, outras não. Depende muito dos seus índices e tal. Se um estiver muito lento, tente o outro.

Relacionado:https://stackoverflow.com/a/4192849/127880