Jump to content

Archived

This topic is now archived and is closed to further replies.

jothaz

Verificando e excluindo duplicidades com e sem chave

Recommended Posts

Verificando e excluindo duplicidades com e sem chave

 

 

/*-Verificar e apagar linhas duplicadas, repetidas

 

OBS.: nestes casos em que é necessário eliminar uma quantidade considerável de registros de uma tabela, é muito importante a realização de um backup antes da operação.

 

1° caso: se a tabela tiver uma chave única e quisermos apagar uma outra coluna que está se repetindo, uma possível solução seria deletar todos os registros filtrando menos (NOT IN) o de código mínimo agrupado GROUP BY pela coluna nome (se tiver mais colunas na tabela, sem grilo, é só adicionar ae), usando a função MIN

*/

set nocount on
declare @teste table (cod int, nome varchar(30))
insert into @teste (cod, nome) values (1, 'Brasil')
insert into @teste (cod, nome) values (2, 'Romenia')
insert into @teste (cod, nome) values (3, 'Brasil')
insert into @teste (cod, nome) values (4, 'Brasil')
insert into @teste (cod, nome) values (5, 'USA')
insert into @teste (cod, nome) values (6, 'Italia')
insert into @teste (cod, nome) values (7, 'USA')
insert into @teste (cod, nome) values (8, 'Brasil')
insert into @teste (cod, nome) values (9, 'USA')
insert into @teste (cod, nome) values (10, 'Argentina')
insert into @teste (cod, nome) values (11, 'Romenia')

--esse select aqui é do que vai ser mantido, logo é só fazer um NOT IN nestes códigos na instrução DELETE.
(select min(cod) from @teste group by nome)

--deletando
delete from @teste
where cod not in (select min(cod) from @teste group by nome)

select * from @teste

 

/*

2° caso: se a tabela tiver a linha inteira idêntica, neste caso usaremos uma tabela virtual para armazenar apenas uma ocorrência das linhas repetidas usando o comando distinct, apagaremos todos os repetidos na tabela e vamos reinserir somente uma ocorrência destes

*/

set nocount on
declare @teste table (cod int, nome varchar(30))
insert into @teste (cod, nome) values (1, 'Brasil')
insert into @teste (cod, nome) values (2, 'Romenia')
insert into @teste (cod, nome) values (1, 'Brasil')
insert into @teste (cod, nome) values (1, 'Brasil')
insert into @teste (cod, nome) values (3, 'USA')
insert into @teste (cod, nome) values (4, 'Italia')
insert into @teste (cod, nome) values (3, 'USA')
insert into @teste (cod, nome) values (1, 'Brasil')
insert into @teste (cod, nome) values (3, 'USA')
insert into @teste (cod, nome) values (5, 'Argentina')
insert into @teste (cod, nome) values (2, 'Romenia')

--verificando o numero de repetições
select cod, nome, count(*) as nro_repeticoes
from @teste
group by cod, nome
having count(*)>1

--armazenando somente uma ocorrência dos repetidos (distinct) na virtual #tempx
select distinct t.cod, t.nome into #tempx from @teste t
inner join (select cod, count(*) as nro_repeticoes
	from @teste
	group by cod
	having count(*)>1)
taux on t.cod = taux.cod

--apagando todos os repetidos
delete from @teste
where cod in (select distinct t.cod from @teste t
	inner join (select cod, count(*) as nro_repeticoes
			from @teste
			group by cod
			having count(*)>1) taux
	on t.cod = taux.cod
)
--reinserindo somente uma ocorrência dos repetidos na tabela principal a partir da tabela temporária #tempx
insert into @teste (cod, nome)
select cod, nome from #tempx 
--destruindo a tabela virtual
drop table #tempx 

--consultado a tabela depois das modificações
select * from @teste

 

Fonte/Autor/link

AUTOR: "Eriva_br"

 

 

Dúvidas, criticas, contribuições, correções e adições serão bem vindas.

Share this post


Link to post
Share on other sites

xi.... créditos?! o que ser isso neh?! http://forum.imasters.com.br/public/style_emoticons/default/devil.gif

http://forum.imasters.com.br/public/style_emoticons/default/devil.gif Espero que coloque

 

hehehehehe

 

Abs ;)

Share this post


Link to post
Share on other sites

Ih ai pessoall,Estava doente e andei sumido... mas estamos de volta!Quantos ao créditos já tinha trocado mp´s com o eriva_br e colocaria o devido crédito e fontes.Postarei vários exemplos e a maioria e uma gde maioria são exemplos da internet que foram adaptados modificados.Colocarei as fontes/autores sempre que forem dividas e conto com a ajuda da comunidade para que todos os scrpt´s úteis comentados, corrigidos se preciso, adaptados e com os devidos crétidos.O post esta aberto é para isto msm incentivar a troca de informações entre a comunidade.eriva_br o post foi alterado com com a fonte.t+

Share this post


Link to post
Share on other sites

eriva_br o post foi alterado com com a fonte.t+

beleza. OBS.: o link ta quebrado, tem um "http://" a mais na frenteo correto seria: http://forum.i evolution.com.br/index.php?showtopic=2727

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.