DELETE FROM TAB1 A WHERE ROWID > (SELECT min(rowid) FROM TAB1 B WHERE A.COL1 = 
B.COL1 and A.COL2 = B.COL2 and A.COL3 = B.COL3 and ....);


Jean Carlos Antunes
Consultor Oracle EBS
+55 41 98744631
+55 19 32290828begin_of_the_skype_highlighting              +55 19 
32290828      end_of_the_skype_highlighting



________________________________
De: jlchiappa <jlchia...@yahoo.com.br>
Para: oracle_br@yahoogrupos.com.br 
Enviadas: Quinta-feira, 4 de Outubro de 2012 9:20
Assunto: [oracle_br] Re: É possível remover registros duplicados sem usar o 
distinct?


  
Bom, basicamente para um SELECT eliminar as linhas duplicadas (entendendo-se 
duplicação como linhas com todos os valores iguais) vc tem o DISTINCT, o UNION, 
o MINUS e o uso de algumas funções analíticas, cfrme 
https://forums.oracle.com/forums/thread.jspa?threadID=2334061 ilustra , é 
basicamente isso ... Outra possibilidade é, nos casos onde o resultado do 
SELECT sem nenhuma adição é que esteja trazendo duplicados, vc pedir para que 
apenas a primeira linha seja considerada, via rownum...
Exemplo, imagine que eu tenho um SELECT * FROM X WHERE chave=10 que me retorna :

chave descrição 
10 descrição 10
10 descrição 10

nesse tipo de caso vc ao invés do DISTINCT pode especificar :

SELECT * FROM X WHERE chave=10 AND rownum < 2;

okdoc ? Mas nem preciso dizer que TODAS as técnicas de eliminação de 
duplicidade TEM SIM um custo em performance, um grau de overhead que dependendo 
dos volumes pode ser intoleravelmente alto - não tem outro jeito desse ambiente 
ser minimamente performático e SEGURO em relação à integridade de dados sem uma 
Normalização decente, faça vc o que fizer : haja ou não impacto, enquanto vc 
não fizer isso vc vai estar basicamente DESPERDIÇANDO recursos no seu servidor 
(storage, CPU, rede, etc) fazendo o coitado ler/armazenar/processar/enviar pela 
rede trocentas linhas inúteis, que é o que uma linha duplicada é , e vai estar 
com uma massa de dados TOTALMENTE não-íntegra e logicamente insegura....

[]s

Chiappa


--- Em mailto:oracle_br%40yahoogrupos.com.br, Wanderson Barrence 
<wbarrence@...> escreveu
>
> Boa Milton!!!
> 
> É no select mesmo!!!
> 
> O banco aqui da empresa é totalmente desnormalizado, onde nem a 1FN é
> respeitada, verifiquei que esse é o principal problema da performance no
> banco, onde encontrei um monte de query's com DISTINCT em tabelas com mais
> de 100 mil linhas.. kkk
> 
> Sei que a solução ideal seria normalizar a base e retirar os distincts das
> query's, todavia esse impacto seria grande para a aplicação, por motivo de
> serem alterados alguns tipos de dados e criação de novas tabelas.
> 
> Como sei que os distincts são necessários nesse caso, eu estou procurando
> saber se existe algo parecido que não cause tanto impacto na performance do
> sistema.
> 
> Att,
> 
> --
> Wanderson Barrence
> DBA Oracle 10g/11g
> Analista de Testes - CBTS
> ----------------------------------------------------------
> MSN: wbarrence@...
> ICQ: 170821994
> Linkedin: http://br.linkedin.com/in/wbarrence
> 
> 
> 
> Em 3 de outubro de 2012 16:20, Milton Bastos Henriquis Jr. <
> miltonbastos@...> escreveu:
> 
> > O distinct remove registros duplicados de um SELECT.
> >
> > Vc falou em remover registros duplicados de uma TABELA.
> >
> > Explique melhor o que vc quer... vc quer apagar os registros FISICAMENTE
> > ou quer apenas que os registros não apareçam repetidos no retorno do
> > Select?
> >
> >
> > 2012/10/3 Wanderson Barrence <wbarrence@...>
> >
> > > **
> > >
> > >
> > > Olá Pessoal,
> > >
> > > Parece até uma pergunta boba, mas fica aí a curiosidade, existe alguma
> > > maneira de remover registros duplicados de uma tabela, ou de um conjunto
> > de
> > > tabelas sem utilizar o distinct?
> > >
> > > Att,
> > >
> > > --
> > > Wanderson Barrence
> > > DBA Oracle 10g/11g
> > > Analista de Testes - CBTS
> > > ----------------------------------------------------------
> > > MSN: wbarrence@...
> > > ICQ: 170821994
> > > Linkedin: http://br.linkedin.com/in/wbarrence
> > >
> > > [As partes desta mensagem que não continham texto foram removidas]
> > >
> > >
> > >
> >
> >
> >
> > --
> > Att,
> >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
> > ------------------------------------
> >
> >
> > ----------------------------------------------------------
> > >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de
> > inteira responsabilidade de seus remetentes.
> > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
> >
> > ----------------------------------------------------------
> > >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package »
> > Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO!
> > VISITE: http://www.oraclebr.com.br/
> > ----------------------------------------------------------
> > Links do Yahoo! Grupos
> >
> >
> >
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>




[As partes desta mensagem que não continham texto foram removidas]

Responder a