Prezados, boa noite! Alguém passou pelo problema de registros duplicados? Como Resolver?
Prezados, boa noite! Alguém passou pelo problema de registros duplicados? Como Resolver?
Oi, André, tudo bem?
Peço desculpas por demorar a retornar.
Dados duplicados são comuns em nosso dia a dia. Existem alguns caminhos que podemos seguir para que eles não sejam um problema em nossas atividades, vamos conhecê-los?
1 - Usar a cláusula DISTINCT
Por meio dela, serão apresentados apenas as linhas de certa tabela cujo determinado grupo de colunas estabelecido não possui o mesmo valor. Abaixo, tem-se a sintaxe geral desta cláusula:
SELECT DISTINCT coluna1, coluna2, coluna3 FROM tabela;
Observe que, após o DISTINCT
, passamos um conjunto de colunas que podem ter valores repetidos. Analise a sua tabela e faça o exercício de identificar quais campos estão recebendo dados repetidos.
2 - Excluir dados duplicados
Caso a repetição de informações seja realmente um problema, você pode excluí-las. Esse processo pode ser feito por meio de um script SQL semelhante a este:
DELETE FROM tabela
WHERE id IN (
SELECT id
FROM (
SELECT id, ROW_NUMBER() OVER(PARTITION BY coluna1, coluna2 ORDER BY id) AS linha
FROM sua_tabela
) subconsulta
WHERE linha > 1
);
No exemplo acima, fizemos uso de uma subconsulta. André, caso você não tenha familiaridade com esse conceito, não tem problema — ao decorrer dos seus estudos, ele ficará menos abstrato e se tornará parte da sua rotina!
De maneira geral, uma subconsulta refere-se a uma consulta SQL que está incorporada em outra consulta maior.
Em nosso exemplo, temos uma subconsulta que é iniciada a partir do segundo SELECT
e utiliza a função ROW_NUMBER()
para contar linhas conforme um conjunto de colunas pré-estabelecidas, gerando ao fim uma nova coluna para armazenar os valores dessa contagem.
Caso tal conjunto de colunas se repita, significa dizer que temos registros (linhas) duplicados — logo, a coluna criada por ROW_NUMBER()
, denominada linha
, terá um valor maior que 1. Caso contrário (isto é, caso seja um conjunto de colunas único, o valor de linha
será igual a 1).
Com essa parte pronta, construímos um novo SELECT
que obtém somente os valores das chaves primárias (identificadas por id
) dos registros presentes na tabela.
Por fim, usamos a cláusula DELETE
juntamente com o WHERE
para filtrar apenas os registros da tabela que aparecem mais de uma vez, fazendo com que os mesmos sejam excluídos da tabela.
André, espero ter ajudado. Como não sei o contexto dos dados duplicados, outros testes terão de ser feitos a fim de obter o resultado esperado, mas espero que esta resposta seja um bom ponto de partida para a resolução do seu problema!
Fico à disposição em caso de dúvidas.
Abraços!