Ola pessoal,
Sei que vocês estão acostumados a ver posts meus sobre tecnologia móvel ou algo relacionado, mas hoje vou falar sobre um pequeno "truque" que usei esse final de semana com o MySQL. Eu estava desenvolvendo o lado servidor de uma nova aplicação mobile (ahh, então "tem a ver" com mobile hehe), e quando fui fazer alguns testes percebi que tinha quase 7 mil registros duplicados (!!!) na minha base de dados!
Bom, o meu primeiro reflexo como programador foi pensar em fazer um "programinha" Java para buscar e deletar todos esses registros duplicados. Mas ai, resolvi tirar as teias de aranha dos neurônios e usar os vários anos de experiência que passei com SQL e criar uma query que fizesse esse trabalho todo de uma vez!!
E a query ficou assim:
Explicação direta:
Sei que vocês estão acostumados a ver posts meus sobre tecnologia móvel ou algo relacionado, mas hoje vou falar sobre um pequeno "truque" que usei esse final de semana com o MySQL. Eu estava desenvolvendo o lado servidor de uma nova aplicação mobile (ahh, então "tem a ver" com mobile hehe), e quando fui fazer alguns testes percebi que tinha quase 7 mil registros duplicados (!!!) na minha base de dados!
Bom, o meu primeiro reflexo como programador foi pensar em fazer um "programinha" Java para buscar e deletar todos esses registros duplicados. Mas ai, resolvi tirar as teias de aranha dos neurônios e usar os vários anos de experiência que passei com SQL e criar uma query que fizesse esse trabalho todo de uma vez!!
E a query ficou assim:
delete from TABLE_NAME
- USING TABLE_NAME, TABLE_NAME AS auxtable
- WHERE (NOT TABLE_NAME.id = auxtable.id)
- AND (TABLE_NAME.name = auxtable.name)
Explicação direta:
- TABLE_NAME: Tabela que contém os registros duplicados que você deseja excluir.
- auxtable: Alias da TABLE_NAME, para encontrar os registros.
- TABLE_NAME.id (e auxtable.id): Chave primária da tabela TABLE_NAME, no meu caso a coluna se chama "id".
- TABLE_NAME.name (e auxtable.name): Coluna a ser usada como referência para encontrar e definir o que é um registro duplicado. Nesse ponto você pode usar mais colunas (com AND) para definir o que é duplicado.
Espero que isso possa ajudá-los! ;-)
Ps.: English version to this post in my blog: http://netomarin.com/blog/20120303/quick-tip-removing-duplicate-records-from-mysql-database/.
Ps.: English version to this post in my blog: http://netomarin.com/blog/20120303/quick-tip-removing-duplicate-records-from-mysql-database/.
[]s
Neto Marin
Comentários