segunda-feira, 11 de maio de 2015

Localizando e Excluindo Registros Duplicados


Evitar a ocorrência de registros duplicados garante a integridade de um banco de dados, pra isso, planejar e prever situações no ato da modelagem do banco são imprescindíveis para não ter dor de cabeça.

No entanto, é comum nos deparamos com bases de dados repletas de registros duplicados, o que pode ter ocorrido por conta de um mal planejamento ou, forçado devido a importação de dados externos.

Localizar e eliminar estes registros, será o que veremos neste artigo.

  • Simulando Registros Duplicados

A forma mais simples de localizar os duplicados é através dos comandos GROUP BY e HAVING. Vamos popular uma tabela de produtos a fim de duplicar registros:
 Create Table produto (  
  id_produto bigint not null,  
  descricao varchar (100),  
  estoque int not null default 0  
 ) ;
  Insert Into produto    
  Values   
  (1, "Produto A", 10),   
  (2, "Produto B", 10),   
  (3, "Produto C", 10),   
  (4, "Produto B", 12),   
  (5, "Produto C", 8),   
  (6, "Produto D", 10),   
  (7, "Produto E", 10),   
  (8, "Produto E", 10),   
  (9, "Produto F", 10);   

  • Identificando os Duplicados

Vejam que os produtos B, C e E estão duplicados, vamos então apresenta-los utilizando um simples select:
 select   
  *   
 from  
   produto   
 group by descricao   
 having count(descricao) > 1 ;  
 id_produto descricao estoque  
 ---------- --------- -------  
      2 Produto B    10  
      3 Produto C    10  
      7 Produto E    10  
Localizar os registros foi possível pois, agrupamos os diferentes produtos em um só (group by), após, adicionamos a condição para que somente os registros que contenham mais de uma ocorrência (having...) fossem apresentados. (Mais de uma ocorrência após agrupado). No exemplo, filtramos somente os registros com mais de uma ocorrência, mas você pode especificar a quantidade desejada.

Nenhum comentário:

Postar um comentário