1
resposta

Registros Duplicados

Prezados, boa noite! Alguém passou pelo problema de registros duplicados? Como Resolver?

1 resposta

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!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!