MatheusRomagna Postado Fevereiro 6, 2013 Denunciar Share Postado Fevereiro 6, 2013 Pessoal seguinte, estou com um pequeno problema. No meu banco de dados, duplicaram varias notas, tipo acho que mais de mil.Estou usando esta SQL para saber quais numeros estão duplicados:SELECT NUMERO, COUNT(*) FROM TABELA GROUP BY 1 HAVING COUNT(*) > 1Isto esta me trazendo todos os numeros que estão em duplicidade.Preciso de uma forma de, deletar estes registros, seja por Stored Procedure ou alguma outra maneira mais rapida ao invés de "uma por uma".Abraços. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Fevereiro 6, 2013 Denunciar Share Postado Fevereiro 6, 2013 Se estão duplicados então supõe-se que todos os atribustos destes registros estão em duplicidade, também.Dito isto, Faça backup antes de começas a fazer a sequencia que informarei abaixo.1- crie uma tabela temporária com os mesmos campos da tabela com registros duplicados2- insira dados na tabela temporária seguindo o script abaixo:INSERT INTO TABELA_TEMPORARIA (relação de campos) SELECT DISTINCT [coloque todos os campos da tabela aqui. Não use asterisco] FROM TABELA WHERE NUMERO IN ( SELECT NUMERO FROM TABELA GROUP BY NUMERO HAVING COUNT(*) > 1 ) 3 - delete os registros duplicados da tabela DELETE FROM TABELA WHERE NUMERO IN ( SELECT NUMERO FROM TABELA_TEMPORARIA) ) 4 - devolva os registros para tabela INSERT INTO TABELA SELECT * FROM TABELA_TEMPORARIA5 - verifique e detone a tabela temporária Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 MatheusRomagna Postado Fevereiro 6, 2013 Autor Denunciar Share Postado Fevereiro 6, 2013 (editado) Buenas Denis! Valeu Pela resposta rápida.Seguinte, não posso mover as notas para uma tabela temporária, pois tenho uma ligação com FK na tabela de itens das notas. Teria alguma outra maneira ?Sobre o Codigo:DELETE FROM TABELA WHERE NUMERO IN ( SELECT NUMERO FROM TABELA_TEMPORARIA) )Acho que este código vai deletar um por um não diferenciando. Sei la, usando o FIRST 1 talvez não resolveria para um DELETE ? ( acho que esta clausula não pode ser usada em DELETE, mas sei la ). Se rodar ele , ele vai deletar todos da tabela que forem NUMERO = 1 , isso ?Precisava de uma coisa mais rápida, uma Procedure talvez, que chamasse os duplicados pelo Select e deletasse apenas 1 de cada. ( Não sei se tem como fazer, pelo que eu acho )Teria como Denis?Abraço Editado Fevereiro 6, 2013 por MatheusRomagna Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Fevereiro 6, 2013 Denunciar Share Postado Fevereiro 6, 2013 'MatheusRomagna' Eu te dei uma sequencia de ações baseadas em que o atributo NUMERO deva conter valor único.Esta sequencia de ações passa por determinar e isolar dos duplicados somenste um registro de cada;Eliminar TODOS os registros duplicado da tabela e retornar para a tabela os registros que voce isolou.Se o atributo NUMERO não for único então esta sequencia está errada e dever-a ser pensada uma nova sequencia. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 MatheusRomagna Postado Fevereiro 6, 2013 Autor Denunciar Share Postado Fevereiro 6, 2013 Tudo Bem Denis, mas o Codigo que te passei ao lançar o Tópico , me traz o atributo NUMERO como campo em duplicidade, correto ?SELECT NUMERO, COUNT(*) FROM TABELA GROUP BY 1 HAVING COUNT(*) > 1 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
MatheusRomagna
Pessoal seguinte, estou com um pequeno problema. No meu banco de dados, duplicaram varias notas, tipo acho que mais de mil.
Estou usando esta SQL para saber quais numeros estão duplicados:
Isto esta me trazendo todos os numeros que estão em duplicidade.
Preciso de uma forma de, deletar estes registros, seja por Stored Procedure ou alguma outra maneira mais rapida ao invés de "uma por uma".
Abraços.
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.