SELECT / DELETE em SQL.... To ficando MALUUUCO.
Amigos,
Estou usando um banco FIREBIRD 1.5 - DBEXPRESS - DELPHI 7.0 e estou tentando fazer uma filtragem dos meus dados. Possuo muitos clientes duplicados em NOME DA EMPRESA e CIDADE. Então, fiz a seguinte rotina:
[b:ca18375c24]SELECT EMPRESA, CIDADE FROM TABELA1 GROUP BY EMPRESA, CIDADE HAVING (COUNT(EMPRESA) > 1)[/b:ca18375c24]
Até ai tudo bem, o problema é como apagar fisicamente esses dados?
Tentei usar o Delete From Tabela1... mas ñ aceitou devido ao [b:ca18375c24]´GROUP BY´[/b:ca18375c24].
Desde já fico muito agradecido.
Muito Obrigado.
Silvério.[b:ca18375c24][/b:ca18375c24]
Estou usando um banco FIREBIRD 1.5 - DBEXPRESS - DELPHI 7.0 e estou tentando fazer uma filtragem dos meus dados. Possuo muitos clientes duplicados em NOME DA EMPRESA e CIDADE. Então, fiz a seguinte rotina:
[b:ca18375c24]SELECT EMPRESA, CIDADE FROM TABELA1 GROUP BY EMPRESA, CIDADE HAVING (COUNT(EMPRESA) > 1)[/b:ca18375c24]
Até ai tudo bem, o problema é como apagar fisicamente esses dados?
Tentei usar o Delete From Tabela1... mas ñ aceitou devido ao [b:ca18375c24]´GROUP BY´[/b:ca18375c24].
Desde já fico muito agradecido.
Muito Obrigado.
Silvério.[b:ca18375c24][/b:ca18375c24]
Sorsilver
Curtidas 0
Respostas
Thomaz_prg
28/11/2005
Você poderia tentar assim:
DELETE FROM TABELA1 A WHERE (SELECT COUNT(*) FROM TABELA1 B WHERE B.EMPRESA = A.EMPRESA AND B.CIDADE = A.CIDADE) > 1
Ou então, criar uma procedure usando um For Select.... e excluindo o que você quer.
DELETE FROM TABELA1 A WHERE (SELECT COUNT(*) FROM TABELA1 B WHERE B.EMPRESA = A.EMPRESA AND B.CIDADE = A.CIDADE) > 1
Ou então, criar uma procedure usando um For Select.... e excluindo o que você quer.
GOSTEI 0
Sorsilver
28/11/2005
Amigo Thomaz, eu estou usando apenas uma Tabela, não existe Tabela B. Nessa tabela existem clientes com nome e cidade repetidos várias vezes, alguns 1,2,3,4 ou até 5 vezes. Ñ tem jeito dessa SQL fungar... rsrs...
[b:57ef33498d]COD-----EMPRESA----------CIDADE[/b:57ef33498d]
01--------BRADESCO---------SAO PAULO
02--------BRADESCO---------SAO PAULO
03--------BRADESCO---------SAO PAULO
04--------BRADESCO---------ARARAQUARA
05--------ITAU----------------CAMPINAS
06--------ITAU----------------CAMPINAS
07--------ITAU----------------BAURU
[b:57ef33498d]DEVE FICAR ASSIM:[/b:57ef33498d]
[b:57ef33498d]COD-----EMPRESA----------CIDADE[/b:57ef33498d]
01--------BRADESCO---------SAO PAULO
04--------BRADESCO---------ARARAQUARA
05--------ITAU----------------CAMPINAS
07--------ITAU----------------BAURU
Se tiver mais alguma luz, por favor help me.
Silvério
[b:57ef33498d]COD-----EMPRESA----------CIDADE[/b:57ef33498d]
01--------BRADESCO---------SAO PAULO
02--------BRADESCO---------SAO PAULO
03--------BRADESCO---------SAO PAULO
04--------BRADESCO---------ARARAQUARA
05--------ITAU----------------CAMPINAS
06--------ITAU----------------CAMPINAS
07--------ITAU----------------BAURU
[b:57ef33498d]DEVE FICAR ASSIM:[/b:57ef33498d]
[b:57ef33498d]COD-----EMPRESA----------CIDADE[/b:57ef33498d]
01--------BRADESCO---------SAO PAULO
04--------BRADESCO---------ARARAQUARA
05--------ITAU----------------CAMPINAS
07--------ITAU----------------BAURU
Se tiver mais alguma luz, por favor help me.
Silvério
GOSTEI 0
Bruno Belchior
28/11/2005
talves isso funcione:
delete from TABELA A where A.IdTabela in (select first 100 skipe 1 B.IdTabela B where B.Nome = A.Nome)
GOSTEI 0
Bruno Belchior
28/11/2005
[quote:62ea5c83e7=´Bruno Belchior´]talves isso funcione:[/quote:62ea5c83e7]corrigindo...
delete from TABELA A where A.IdTabela in (select first 100 skipe 1 B.IdTabela B where B.Nome = A.Nome)
delete from TABELA A where A.IdTabela in (select first 100 skipe 1 B.IdTabela from TABELA B where B.Nome = A.Nome)
GOSTEI 0
Emerson Nascimento
28/11/2005
ou assim:
delete from tabela where not cod in (select min(cod) from tabela group by empresa, cidade)
GOSTEI 0