Prezados, boa noite! Alguém passou pelo problema de registros duplicados? Como Resolver?
ATÉ 50% OFF
TÁ ACABANDO!
0 dias
0 horas
0 min
0 seg
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!