EXCLUIR REGISTROS DUPLICADOS NO SQL SERVER

 Tópico anterior Próximo tópico Novo tópico

EXCLUIR REGISTROS DUPLICADOS NO SQL SERVER

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#499688 - 24/04/2022 11:44:38

JCM0867
BALNEARIO CAMBORIU
Cadast. em:Março/2012


Última edição em 24/04/2022 12:17:07 por JCM0867

Olá pessoal

Tenho a seguinte tabela:

id     Campo1    campo2    Campo 3
1         AAA           BB0           CC0
2         AAA           BB0           CC0
3         AA1           BB1           CC1
4         AA1           BB1           CC1
5         AA2           BB2           CC2
6         AA2           BB2           CC2
7         AA3           BB3           CC3
8         AA3           BB3           CC3

como dou um delete para excluir: o 2, 4, 6 e 8
ou o 1, 3, 5 e 7
o id é auto incremento e pode ser qualquer valor o que interessa são as duplicidades.

O resultado ficaria
id     Campo1    campo2    Campo 3
2         AA0           BB0           CC0
4         AA1           BB1           CC1
6         AA2           BB2           CC2
8         AA3           BB3           CC3

Eu poderia tirar o incremento e dar um distinct para uma nova tabela, colocar um auto incremento novamente excluir a tabela com duplicidade e renomear a tabela nova.
Mas só o ato de excluir a tabela com duplicidade por alguns minutos e depois recoloca-la poderia dar pau pq certamente estão usando.

Tem algo que posso fazer noo sql para excluir estas duplicidades? O valor no incremento Id nesse caso não importa


Grato




#499689 - 24/04/2022 17:48:49

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Sugiro fazer um join implícito, ou seja, um join com ela mesma:

select campo1, campo2, campo3 from tabela a inner join tabela b on a.campo1 = b.campo1
inner join tabela c on a.campo2 = c.campo2
inner join tabela d on a.campo3 = d.campo3


Mais ou menos por aí.

_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#499690 - 24/04/2022 19:19:12

JCM0867
BALNEARIO CAMBORIU
Cadast. em:Março/2012


Não entendi,
e a exclusão da duplicidades na tabela original onde entra?




Resposta escolhida #499691 - 24/04/2022 19:34:23

JABA
CABO FRIO
Cadast. em:Agosto/2005


Se essa lógica de duplicação permanece até o último registro da tabela, então você pode excluir apenas os registros ímpares ou pares, da seguinte forma:

Para par
Delete from tabela where (Id % 2) = 0



Para ímpar
Delete from tabela where (Id % 2) > 0



_______________________________________________________________________________________________

Se a alma ou esprito so imateriais, como eles fazem para se localizar quando o corpo est em movimento?



#499692 - 24/04/2022 22:11:20

JCM0867
BALNEARIO CAMBORIU
Cadast. em:Março/2012


Última edição em 24/04/2022 22:18:34 por JCM0867

Opa,
Interessante teu script, mas não se aplica a minha situação e nem todos são duplicados
pode existir uma duplicidade com id impar e Par
Veja um exemplo de tabela:

create table tab_dup (Id int IDENTITY(1,1), Cod int, col1 varchar(20), col2 varchar(20))

-- insere registros
insert into tab_dup (cod,col1,col2)
values
(1,'vinicius','fonseca'),
(2,'maria','fonseca'),
(3,'joao','fonseca'),
(4,'jose','fonseca'),
(5,'carlos','fonseca'),
(6,'lunis','fonseca'),
(1,'vinicius','fonseca'),
(1,'vinicius','fonseca'),
(2,'maria','fonseca'),
(5,'carlos','fonseca')

nem o Apagar Par e nem o Apagar Impar dará certo. É dificil, mas já teve até registro triplicado
Se conseguir somente para duplicados 2x já ajuda muito.




#499693 - 24/04/2022 22:33:06

JCM0867
BALNEARIO CAMBORIU
Cadast. em:Março/2012


Última edição em 24/04/2022 22:37:10 por JCM0867

Ache!
A quem interessar:

with cte as
(select id, col1, col2, row_number() over (partition by id, col1, col2 order by id) linha from tab_dup )
delete from cte where linha > 1


Resultado da tabela acima:

id    Cod    Col1         Col2
--------------------------------------
1    1    vinicius     fonseca
2    2    maria     fonseca
3    3    joao      fonseca
4    4    jose          fonseca
5    5    carlos     fonseca
6    6    lunis       fonseca




#499694 - 24/04/2022 22:33:40

JABA
CABO FRIO
Cadast. em:Agosto/2005


Aqui tem um bom exemplo:

viniciusfonsecadba.wordpress.com/2018/12/11/apagando-registros-duplicados-no-sql-server/

Ou usar o segundo método dos exemplos dado pela microsoft:

docs.microsoft.com/pt-br/troubleshoot/sql/database-design/remove-duplicate-rows-sql-server-tab#:~:text=Se%20sua%20l%C3%B3gica%20para%20excluir,ORDER%20BY%20para%20fazer%20isso.

_______________________________________________________________________________________________

Se a alma ou esprito so imateriais, como eles fazem para se localizar quando o corpo est em movimento?



#499695 - 24/04/2022 22:57:41

JCM0867
BALNEARIO CAMBORIU
Cadast. em:Março/2012


Última edição em 24/04/2022 23:07:36 por JCM0867

Opa, foi aí mesmo que achei. inclusive usei o exemplo dele aqui. Diferença que ele não colocou um auto incremento, coloquei para testar.
coloquei ids auto incremento bem aleatórios e funcionou igual
O da Microsoft é bem semelhante

este comando não conhecia:
with cte as
(select...





#499696 - 24/04/2022 23:14:33

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Com um select daqueles que te passei, você pode isolar os ids que quer deletar e usar eles como parâmetro da clausula IN:

Delete from Tabela Where id IN (SELECT bla bla bla)


_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#499697 - 24/04/2022 23:29:59

JCM0867
BALNEARIO CAMBORIU
Cadast. em:Março/2012


Citação:
:
Com um select daqueles que te passei, você pode isolar os ids que quer deletar e usar eles como parâmetro da clausula IN:

Delete from Tabela Where id IN (SELECT bla bla bla)


O problema seria montar corretamente o bla, bla, bla...rs

Mas valeu pelos dois Oráculos do canal. O Jaba está quase...rs
Estava fazendo isso na unha, ordenava e apagava  os repetidos um por um. e as vezes eram dezenas. que tragédia.



 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por JCM0867 em 25/04/2022 17:45:51