Usuário com melhor resposta
duplicatas em sql

Pergunta
-
Olá galera, gente eu to com um problema
o Sistema que eu elaborei esta duplicando uns codigos no sql e eu preciso esta apagando pois nao ta dando pra esta cadastrando na determinada tela do sistema. Criei um codigo pra copiar tudo que esta sendo duplicado no sql server
select
id_produto,
count(id_produto) as id_associacao
from
tb_associacao_produto
group by id_produto
having count(id_produto) > 1 ;
eu preciso está apagando esses codigos que repetiu mas tenho que deixar um de cada
alguem pode me ajudar, nao sei mais o que fazer.
Respostas
-
Bom dia,
Experimente dessa forma:
with CTE_RN as ( select *, ROW_NUMBER() OVER(PARTITION BY id_produto ORDER BY id_produto) as RN from tb_associacao_produto ) delete from CTE_RN where RN > 1
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Tulio Rosa sexta-feira, 19 de setembro de 2014 14:42
- Marcado como Resposta Ricardo Barbosa Cortes sexta-feira, 19 de setembro de 2014 17:24
-
Primeiro, qual é a chave primária da tabela tb_associacao_produto?
Segundo, tenha certeza que se trata de um valor duplicado. Pelo nome da tabela eu diria que é normal (pelo menos é a impressao que passa, pois da ideia de uma table de ligaçao N para N, onde duplicaçoes sao normais)
Se for mesmo um caso de duplicaçao e vc tenha uma chave primaria bem definida use este template:
DELETE FROM table LEFT OUTER JOIN ( SELECT MIN(id) as id, campo1, campo2, campo3 FROM table GROUP BY campo1, campo2, campo3 ) as t1 ON table.id = t1.id WHERE t1.id IS NULL
desta forma somente os resgitros com a menor chave primaria restarao..
Faça um bom backup [um bom backup é aquele que o restore funcione :) ] antes de fazer esse tipo de supressao
att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Sugerido como Resposta Ricardo Barbosa Cortes sexta-feira, 19 de setembro de 2014 17:24
- Marcado como Resposta Ricardo Barbosa Cortes sexta-feira, 19 de setembro de 2014 17:24
Todas as Respostas
-
Bom dia,
Experimente dessa forma:
with CTE_RN as ( select *, ROW_NUMBER() OVER(PARTITION BY id_produto ORDER BY id_produto) as RN from tb_associacao_produto ) delete from CTE_RN where RN > 1
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Tulio Rosa sexta-feira, 19 de setembro de 2014 14:42
- Marcado como Resposta Ricardo Barbosa Cortes sexta-feira, 19 de setembro de 2014 17:24
-
-
Primeiro, qual é a chave primária da tabela tb_associacao_produto?
Segundo, tenha certeza que se trata de um valor duplicado. Pelo nome da tabela eu diria que é normal (pelo menos é a impressao que passa, pois da ideia de uma table de ligaçao N para N, onde duplicaçoes sao normais)
Se for mesmo um caso de duplicaçao e vc tenha uma chave primaria bem definida use este template:
DELETE FROM table LEFT OUTER JOIN ( SELECT MIN(id) as id, campo1, campo2, campo3 FROM table GROUP BY campo1, campo2, campo3 ) as t1 ON table.id = t1.id WHERE t1.id IS NULL
desta forma somente os resgitros com a menor chave primaria restarao..
Faça um bom backup [um bom backup é aquele que o restore funcione :) ] antes de fazer esse tipo de supressao
att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Sugerido como Resposta Ricardo Barbosa Cortes sexta-feira, 19 de setembro de 2014 17:24
- Marcado como Resposta Ricardo Barbosa Cortes sexta-feira, 19 de setembro de 2014 17:24