Script é destinado a necessidades de eliminar registros duplicados dos quais a chave primária não é igual.
Para o nosso exemplo vamos utilizar uma tabela de backup TABELA_BKP com os campos “Codigo” como chave primária, “Codigo1” uma chave estrangeira e “Codigo2” outra chave do qual estão duplicados e não deveriam, o atributo ativo defino os registros que estão ativos neste caso.
Este script pode ser rodado por partes. Caso você for fazer isso roda um passo inteiro de cada vez.
Caso você queira saber se existem registros duplicados em uma tabela basta executar o seguinte SQL (Altere de acordo com a sua tabela):
1 2 3 4 5 6 7 8 9 10 |
Select Codigo1, Codigo2 FROM TABELA GROUP BY Codigo1, Codigo2 HAVING COUNT ( * ) > 1 |
1) Primeiro devemos criar esta tabela de backup e inserir todos os registros nela.
— —Tabela de Backup – Início
1 2 3 4 5 6 7 8 |
CREATE TABLE TABELA_BKP ( Codigo int PRIMARY KEY, Codigo1 int, Codigo2 int, Ativo char(1) ) |
1 2 3 4 5 6 |
INSERT INTO TABELA_BKP select Codigo, Codigo1, Codigo2, Ativo FROM TABELA_ORIGINAL |
— —Tabela de Backup – Fim
2) Devemos criar duas outras tabelas onde a primeira irá armazenar os registros que serão considerados os únicos e na outra a identificação dos registros duplicados, que no caso são o Codigo1 e Codigo2 que não devem repetir. Na tabela REGISTROS_UNICOS devemos criar o campo Codigo que é o identificador de cada registro, na tabela REGISTROS_DUPLICADOS não devemos.
— —Tabela Temporária de registros únicos —1 2 3 4 5 6 7 |
CREATE TABLE REGISTROS_UNICOS ( Codigo int PRIMARY KEY, Codigo1 int, Codigo2 int ) |
1 2 3 4 5 6 7 |
CREATE TABLE REGISTROS_DUPLICADOS ( Codigo1 int, Codigo2 int ) |
1 2 3 4 5 6 7 8 9 10 |
INSERT INTO REGISTROS_DUPLICADOS SELECT Codigo1, Codigo2 FROM TABELA_ORIGINAL GROUP BY Codigo1, Codigo2 HAVING COUNT ( * ) > 1 |
4) Agora devemos buscar uma tupla de cada registros duplicado, da qual está tupla será a que considerarmos como o registro único. Para isso utilizaremos um curso que busca da tabela de registros duplicados que já preenchemos.
— —Pega uma linha de cada um dos registros dupplicados – Início —1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
DECLARE TodosRegistrosDuplicados CURSOR KEYSET FOR SELECT Codigo1, Codigo2 FROM REGISTROS_DUPLICADOS GO OPEN TodospalpitesDuplicados DECLARE @Codigo1 INTEGER DECLARE @Codigo2 INTEGER FETCH FIRST FROM TodosRegistrosDuplicados INTO @Codigo1, @Codigo2 WHILE @@FETCH_STATUS = 0 BEGIN |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
insert into REGISTROS_UNICOS select TOP 1 Codigo, Codigo1, Codigo2 from TABELA_ORIGINAL where Codigo1 = @Codigo1 AND Codigo2= @Codigo2 FETCH NEXT FROM TodosRegistrosDuplicados INTO @Codigo1, @Codigo2 END CLOSE TodosRegistrosDuplicados DEALLOCATE TodosRegistrosDuplicados |
5) Esta consulta apenas nos mostra se há registros duplicados em nossa nova tabela. Caso não haja retorno desta consulta você pode pular direto para o passo 8 onde você apaga as tabelas temporárias pois não há registros duplicados.
— —Verifica se existe registros duplicados – Início —1 2 3 4 5 |
SELECT Codigo1, Codigo2 FROM REGISTROS_DUPLICADOS |
6) Este passo atualiza os registros duplicados de menos o registro que consideramos como único.
— —Atualiza os registros duplicados —1 2 3 4 5 6 7 8 9 10 11 12 |
UPDATE TABELA_ORIGINAL SET TABELA_ORIGINAL.ATIVO = 'N' FROM TABELA_ORIGINAL, REGISTROS_UNICOS WHERE TABELA_ORIGINAL.Codigo1 = REGISTROS_UNICOS.Codigo1 AND TABELA_ORIGINAL.Codigo2 = REGISTROS_UNICOS.Codigo2 AND TABELA_ORIGINAL.Codigo <> REGISTROS_UNICOS.Codigo |
1 2 3 4 5 6 7 8 9 10 11 12 |
UPDATE TABELA_ORIGINAL SET TABELA_ORIGINAL.ATIVO = 'S' FROM TABELA_ORIGINAL, REGISTROS_UNICOS WHERE TABELA_ORIGINAL.Codigo1 = REGISTROS_UNICOS.Codigo1 AND TABELA_ORIGINAL.Codigo2 = REGISTROS_UNICOS.Codigo2 AND TABELA_ORIGINAL.Codigo = REGISTROS_UNICOS.Codigo |
8) Este passo apaga as tabelas utilizadas como temporárias.
— —Apaga Tabelas Temporárias —1 2 3 4 |
DROP TABLE REGISTROS_UNICOS DROP TABLE REGISTROS_DUPLICADOS |
4 Comentários to “Remoção de tuplas duplicadas”
Rejane Ayres diz:
20/05/2008 em 07:52 AM
Interessante…
Renato diz:
08/08/2008 em 04:50 PM
Tem um modo mais fácil, sem ter que criar várias tabelas, ou seja, usando apenas a tabela existente.
Samuel diz:
11/08/2008 em 07:31 AM
Renato, se há uma maneira mais facil crie um post aqui com ela, pois você pode ajudar outros que venham a ter este problema.
Eu também não sei fazer de outra forma, estou curioso.
pandora jewelry online store diz:
21/07/2010 em 02:52 AM
Remoção de tuplas duplicadas?tiffany
Comentário
CATEGORIAS
HomeDesign
SEO
Empreendimento
Cifras
Ruby e Rails
Flex
Photoshop
Flash
XHTML/CSS
JavaScript
Variados
Database
Firefox
Projetos
3D
Projetos
TextMate
Smalltalk
Mac
Livros
ARQUIVO
07/2010 (2)06/2010 (4)
05/2010 (4)
04/2010 (4)
03/2010 (5)
02/2010 (7)
01/2009 (4)
12/2009 (7)
11/2009 (4)
10/2009 (10)
09/2009 (7)
08/2009 (6)
07/2009 (12)
06/2009 (5)
05/2009 (6)
04/2009 (9)
03/2009 (14)
02/2009 (18)
01/2009 (14)
12/2008 (20)
11/2008 (18)
10/2008 (9)
09/2008 (12)
08/2008 (6)
07/2008 (12)
06/2008 (10)
05/2008 (15)
04/2008 (19)




PomoDo e Pomodoro Technique
comentado por Luis
Flash SlideShow
comentado por Gilmar
50% do software é design
comentado por Daniel Lopes
Vetores Grátis - VectorLab Pack
comentado por louis vuitton
Texturas legais
comentado por thomas sabo kommt