Excluindo arquivos duplicados

Firebird

07/11/2013

com em pesquisa na internet achei este código que verifica arquivos duplicados más, aparece somente códigos que não são duplicados..

SELECT COUNT(*) FROM os
GROUP BY DESCRICAO
HAving count(ID_OS)>1



Tenho a tabela OS e o campo ID_OS

más nela tem registros duplicados de mesmo código..
estou usando o SQL EDITOR do IBXpert e gostaria de ver quais numeros do ID_OS esta duplicado e poder exclui-los, parece ser simples más num to dando conta não...

vlw t+
Gilmar Moraes

Gilmar Moraes

Curtidas 0

Respostas

Thiago Irrazabal

Thiago Irrazabal

07/11/2013

Bom dia, já tentou assim?

SELECT ID_OS, COUNT(*) FROM OS
GROUP BY 1
HAVING COUNT(*) > 1





Att,
Thiago Irrazabal de Oliveira.
GOSTEI 0
Gilmar Moraes

Gilmar Moraes

07/11/2013

Bom dia, já tentou assim?

SELECT ID_OS, COUNT(*) FROM OS
GROUP BY 1
HAVING COUNT(*) > 1



Amigo, deu certinho..más como faço para excluir os duplicados..só para se ter uma idéia tem arquivos com 7 ocorrencia de duplicidade..vlw mesmo

Att,
Thiago Irrazabal de Oliveira.


pesquisando achei este codigo em doc aki do forum mesmo..
Delete From os t1
Where rowid < (Select max(rowid) From os t2 Where t1.primary_key = t2.primary_key);


más minha dúvida,... não atribuí chaves primárias para poder fazer a copia do bando de dados, más codigo acima parecer ser obrigatorio isso..más entendo que não era para existir duplicidade de um mesmo codigo..entãi isso não faria muito sentido..
GOSTEI 0
Russimar Silva

Russimar Silva

07/11/2013

Mensagem com o usuário errado! :/
GOSTEI 0
Thiago Irrazabal

Thiago Irrazabal

07/11/2013

Segue o script para exclusão dos registros duplicados.

DELETE FROM OS WHERE ID_OS IN (SELECT ID_OS FROM OS
GROUP BY ID_OS
HAVING COUNT(*) > 1);





Att,
Thiago Irrazabal de Oliveira.
GOSTEI 0
Gilmar Moraes

Gilmar Moraes

07/11/2013

Segue o script para exclusão dos registros duplicados.

DELETE FROM OS WHERE ID_OS IN (SELECT ID_OS FROM OS
GROUP BY ID_OS
HAVING COUNT(*) > 1);





Att,
Thiago Irrazabal de Oliveira.


SELECT ID_OS, COUNT(*) FROM OS
GROUP BY 1
HAVING COUNT(*) > 1;

DELETE FROM OS WHERE ID_OS IN (SELECT ID_OS FROM OS
GROUP BY ID_OS
HAVING COUNT(*) > 1);


então..

precisa destes dois códigos ou só o ultimo

dá este erro

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 5, column 1.
DELETE.



GOSTEI 0
Alessandro Yamasaki

Alessandro Yamasaki

07/11/2013

O último SQL é a exclusão dos seus registros conforme as dicas dos colegas. Sozinho ele funciona?:
GOSTEI 0
Thiago Irrazabal

Thiago Irrazabal

07/11/2013

O select era apenas para te mostrar quais os registros, o delete tu tem que passar no executor de scripts (CTRL + F12), ele sozinho é claro...




Att,
Thiago Irrazabal de Oliveira.
GOSTEI 0
Gilmar Moraes

Gilmar Moraes

07/11/2013

O select era apenas para te mostrar quais os registros, o delete tu tem que passar no executor de scripts (CTRL + F12), ele sozinho é claro...




Att,
Thiago Irrazabal de Oliveira.


Amigo..deu tudo certo e funcionou perfeito..muito obrigado pela ajuda..t+
GOSTEI 0
Gilmar Moraes

Gilmar Moraes

07/11/2013

O select era apenas para te mostrar quais os registros, o delete tu tem que passar no executor de scripts (CTRL + F12), ele sozinho é claro...




Att,
Thiago Irrazabal de Oliveira.


estou prescisando de um infomarção boba más nem sei por onde começo ..nesta mesma tabela precisei inserir um campo que se chama ENTREGUE que vai receber valores 0 e 1, de inicio queria que todos os campos recebecem o valor 0 tem como fazer isso em SQL sem prescisar programar no delphi ?
GOSTEI 0
Alex Lekao

Alex Lekao

07/11/2013

Oi Bom dia!!

Da para vc colocar na campo, uma informacao como default zero.
GOSTEI 0
Gilmar Moraes

Gilmar Moraes

07/11/2013

Oi Bom dia!!

Da para vc colocar na campo, uma informacao como default zero.


uso o IBXPERT.. como faço isso ?
GOSTEI 0
Thiago Irrazabal

Thiago Irrazabal

07/11/2013

ALTER TABLE OS ADD ENTREGUE INTEGER DEFAULT 0;




Att,
Thiago Irrazabal de Oliveira.
GOSTEI 0
Deivison Melo

Deivison Melo

07/11/2013

ou sempre que efetuar as pesquisas fazer o seguinte:

select COALESCE(ENTREGUE,0) ENTREGUE from OS


O Comando COALESCE faz isso...

GOSTEI 0
Gilmar Moraes

Gilmar Moraes

07/11/2013

ou sempre que efetuar as pesquisas fazer o seguinte:

select COALESCE(ENTREGUE,0) ENTREGUE from OS


O Comando COALESCE faz isso...



tipo..na verdade é o seguinte, tenho duas tabelas que quero integrar em apenas uma, tenho uma tabela arquivo morto e uma tabela OS. No arquivo morto, todos os registros (1500 + ou -) receberão no seu campo ENTREGUE igual a 1 ena outra tabela OS receberá 0 e depois as dua tabelas será exportada para penas uma..onde os registros que receberam 1 será os dados baixa e os 0 será os em aberto..neste caso vc falou alguma coisa sobre pesquisa..num teria como já lançar o valor sem prescisar desta busca..estava pensando em programae no delphi um while para fazer isso más acho que em sql é muito mais rápido..vlw
GOSTEI 0
Gilmar Moraes

Gilmar Moraes

07/11/2013

ALTER TABLE OS ADD ENTREGUE INTEGER DEFAULT 0;




Att,
Thiago Irrazabal de Oliveira.


dá este erro..

This operation is not defined for system tables.
unsuccessful metadata update.
STORE RDB$RELATION_FIELDS failed.
attempt to store duplicate value (visible to active transactions) in unique index "RDB$INDEX_15".


esta é uma tabela antiga que se chama ORCAMENTO_OFIC_ELET e o campo BAIXA

o codigo que deu o erro ficou assim.
ALTER TABLE ORCAMENTO_OFIC_ELET ADD BAIXA INTEGER DEFAULT 0;


vlw
GOSTEI 0
Alex Lekao

Alex Lekao

07/11/2013

Oi bom dia!!!

Verifica se ja nao tem o campo, se nao em engano a mensagem esta indicando isso.

se ja tiver muda o add para o camomando de alterar a coluna e ve se da certo.
GOSTEI 0
POSTAR