Update dados/Excluindo duplicidade
Usando o select:
select cnpj, count(ecnpj) from tabela group by cnpj having count(cnpj)>1
busquei todos com duplicidade no cnpj, agora preciso fazer com que a PK menor receba todos os vínculos das PKs maiores do mesmo cpf, pois há registros que não podem ser perdidos, para assim posteriormente excluir os vínculos dos cfps repetidos e seus cadastros
delete from tabela where cnpj in (select cnpj from tabela group by cnpj having Count(cnpj)>1) and not Pk in (select Min(Pk) from tabela group by cnpj having Count(cnpj)>1)
como posso fazer está passagem de registros e posteriormente a exclusão de todos os vínculos?
select cnpj, count(ecnpj) from tabela group by cnpj having count(cnpj)>1
busquei todos com duplicidade no cnpj, agora preciso fazer com que a PK menor receba todos os vínculos das PKs maiores do mesmo cpf, pois há registros que não podem ser perdidos, para assim posteriormente excluir os vínculos dos cfps repetidos e seus cadastros
delete from tabela where cnpj in (select cnpj from tabela group by cnpj having Count(cnpj)>1) and not Pk in (select Min(Pk) from tabela group by cnpj having Count(cnpj)>1)
como posso fazer está passagem de registros e posteriormente a exclusão de todos os vínculos?
Fernando Bortolo
Curtidas 0
Respostas
Marcos P
09/06/2015
Grave as ocorrências dos CNPJ´s duplicados em uma temporária.
Depois, selecione, para cada registro da temporária os registros da tabela principal cuja PK atenda seu critério de exclusão.
Por exemplo... where pk <> max(pk).
Com esse select funcionando, ou seja, você vai estar relacionando todos os registros duplicados QUE NÃO lhe interessam, adapte o select para um delete.
Como você não citou o banco, não posso lhe ajudar muito mais do que isso.
Depois, selecione, para cada registro da temporária os registros da tabela principal cuja PK atenda seu critério de exclusão.
Por exemplo... where pk <> max(pk).
Com esse select funcionando, ou seja, você vai estar relacionando todos os registros duplicados QUE NÃO lhe interessam, adapte o select para um delete.
Como você não citou o banco, não posso lhe ajudar muito mais do que isso.
GOSTEI 0
Fernando Bortolo
09/06/2015
Verdade, esqueci desta parte, uso o Firebird 2.5.
Preciso pegar todas as tabelas relacionadas nas PKs max e passar para a min para ai sim fazer a exclusão dos vínculos das max e por fim a exclusão dela mesma
Preciso pegar todas as tabelas relacionadas nas PKs max e passar para a min para ai sim fazer a exclusão dos vínculos das max e por fim a exclusão dela mesma
GOSTEI 0
Marcos P
09/06/2015
Na verdade, você precisa pegar todas as PKS, relacionadas a registros com duplicidade de CNPJ, cujo chave seja diferente de MAX() !
Se você não conseguir resolver com um único select, pode criar uma coluna vazia na temporária para receber ( via update ) a PH do registro com o MAX() de cada CNPJ.
Tendo isso, fica fácil excluir os registros cujas PKs diferem desse valor...
É um passo a mais que pode lhe ajudar !
Se você não conseguir resolver com um único select, pode criar uma coluna vazia na temporária para receber ( via update ) a PH do registro com o MAX() de cada CNPJ.
Tendo isso, fica fácil excluir os registros cujas PKs diferem desse valor...
É um passo a mais que pode lhe ajudar !
GOSTEI 0