Update dados/Excluindo duplicidade

Delphi

09/06/2015

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?
Fernando Bortolo

Fernando Bortolo

Curtidas 0

Respostas

Marcos P

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.
GOSTEI 0
Fernando Bortolo

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
GOSTEI 0
Marcos P

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 !
GOSTEI 0
POSTAR