Precisei fazer a migração de dados de algumas tabelas de cadastro (telefones, hobbies, interesses, formações e etc.) para uma única tabela diferenciando-os pelo id do usuário e o id do campo. O problema é que meu script acabou duplicando as informações. Para a minha sorte isso aconteceu em um banco de desenvolvimento, onde era possível apagar os dados da tabela, ajustar os scripts e refazer a migração. Eu não queria ter esse trabalho novamente e logo resolvi pesquisar um script sql que me ajudasse a apagar os registros duplicados, nesse caso deixando apenas o último registro gravado.
Assumindo que você use o banco de dados MySql e tenha uma tabela chamada “nomes”, e que essa tabela tenha os campos id e nome. Essa sintaxe pode ser usada em outros bancos, utilizaremos o seguinte comando:
Perceba que no comando sql após o FROM
eu chamo duas vezes a tabela “nomes”, mas as diferencio pelas letras a e b. Você poderia dar o nome que quisesse. Note também que depois do WHERE
eu faço a comparação entre as colunas, verificando a duplicidade e depois digo que o id de “a” deve ser menor que o de “b”. Dessa forma o MySql vai comparar todos os registros com o mesmo nome e apagar aqueles que contenham o menor id.
nomes: É a tabela com os registros duplicados.
nome: É o campo para comparação dos registros.
id: É a chave primária da tabela.
Veja na prática como acontece:
Tabelas com os registros duplicados
Aplicando o script descrito acima:
Caso queira apagar todos os registros duplicados, deixando apenas os registros únicos é só trocar o “<” por “!=”
veja um exemplo:
Pronto! É isso aí pessoal, muito simples né?