Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

excluir linhas duplicadas do Oracle


Muitas vezes, precisamos encontrar e excluir linhas duplicadas da tabela do Oracle devido a vários motivos no banco de dados. Precisamos excluir para limpar os problemas de dados com frequência. Há muitas maneiras de oracle excluir linhas duplicadas, mas manter o original. Eu mostraria alguns métodos  mais rápidos para conseguir isso nesta postagem. Mostrarei o método onde o rowid é usado e o método onde o rowid não é usado. Observe que você deve  identificar todas as colunas que tornam a linha uma duplicata na tabela e especificar todas essas colunas na instrução de exclusão apropriada no SQL

Como excluir linhas duplicadas do Oracle


Aqui estão algumas das maneiras de excluir linhas duplicadas de maneira fácil

(A) Método rápido, mas você precisa recriar todos os índices oracle, gatilhos
create table my_table1 as select distinct * from my_table;
drop my_table;
rename my_table1 to my_table;

Exemplo
SQL> select * from mytest;
ID NAME
------
1 TST 
2 TST 
1 TST

SQL> create table mytest1 as select distinct * from mytest;
Table created.

SQL> select * from mytest1;
ID NAME
-------
2 TST 
1 TST
SQL> drop table mytest;
Table dropped.
SQL> rename mytest1 to mytest;
Table renamed.
SQL> select * from mytest;
ID NAME
-------
2 TST
1 TST

(B) Como encontrar e excluir registros duplicados no oracle usando rowid. O exemplo abaixo mostra uma coluna. Se você excluiu com base em duas colunas, você pode especificar duas colunas
Delete from my_table where rowid not in (
select max(rowid) from my_table group by my_col_name );

(C)   Use o Oracle Self-Join para excluir linhas duplicadas
DELETE FROM my_table A WHERE ROWID > (SELECT min(rowid) FROM my_table B WHERE A.key_values = B.key_values);

(D) Use a cláusula existe
delete from my_table t1
where exists (select 'x' from my_table t2
where t2.key_value1 = t1.key_value1
and t2.key_value2 = t1.key_value2
and t2.rowid > t1.rowid);

(E) excluir registros duplicados usando funções analíticas do Oracle
delete from my_table
where rowid in
(select rid
from
( select
rowid rid,
row_number() over (partition by column_name order by rowid) rn
from my_table)
where rn <> 1
)

Como mostrado, há muitas maneiras de excluir linhas duplicadas nas tabelas. Esses comandos podem ser úteis em muitas situações e podem ser usados ​​dependendo do requisito. Sempre verifique se temos backup disponível antes de executar qualquer instrução. Também devemos primeiro encontrar a duplicata usando a consulta e depois verificá-la antes de confirmá-la

como encontrar registros duplicados no oracle usando rowid

select * from my_table
where rowid not in
(select max(rowid) from my_table group by column_name);

Então, primeiro encontre a duplicata usando a consulta acima e, em seguida, exclua-a. A contagem de exclusões deve ser igual à contagem de linhas da consulta acima. Agora, execute a consulta localizar duplicata novamente. Se não houver duplicata, estamos prontos para confirmar

Consulte o artigo abaixo para se aprofundar no Sql

Tutoriais Oracle Sql :Contém a lista de todos os artigos úteis sobre Oracle SQL. Explore-os para aprender sobre o Oracle Sql, mesmo se você souber Oracle Sql
Perguntas da entrevista Oracle:Confira esta página para obter as 49 principais perguntas e respostas da entrevista Oracle:Noções básicas, Oracle SQL para ajudá-lo em entrevistas.Material adicional também é fornecido
cláusula where no oracle:Restringindo o conjunto de dados, cláusula where, cláusula what is where na instrução sql, funções
single row do operador de comparação no Oracle:Confira isto para descobrir Funções de linha única no sql, Oracle data funções,funções numéricas em sql,função de caractere em sql
consultas oracle sql
blog.oracle.com