Oracle
 sql >> Database >  >> RDS >> Oracle

eliminare le righe duplicate da Oracle

Spesso abbiamo bisogno di trovare ed eliminare le righe duplicate dalla tabella Oracle a causa di molte ragioni nel database. Abbiamo bisogno di eliminare per risolvere spesso i problemi di dati. Esistono molti modi per eliminare le righe duplicate da Oracle ma mantenere l'originale. In questo post mostrerei alcuni metodi più veloci per ottenerlo. Mostrerò il metodo in cui viene utilizzato rowid e il metodo in cui non viene utilizzato rowid. Tieni presente che devi identificare tutte le colonne che rendono la riga un duplicato nella tabella e specificare tutte quelle colonne nell'istruzione di eliminazione appropriata in SQL

Come eliminare le righe duplicate da Oracle

Ecco alcuni dei modi per eliminare le righe duplicate in modo semplice

(A) Metodo veloce ma è necessario ricreare tutti gli indici di Oracle, i trigger

create table my_table1 as select distinct * from my_table;
drop my_table;
rename my_table1 to my_table;

Esempio

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) Come trovare ed eliminare record duplicati in Oracle usando rowid. L'esempio seguente mostra una colonna. Se hai eliminato in base a due colonne, puoi specificare due colonne

Delete from my_table where rowid not in (
select max(rowid) from my_table group by my_col_name );

(C)   Utilizza l'auto-unione di Oracle per eliminare le righe duplicate

DELETE FROM my_table A WHERE ROWID > (SELECT min(rowid) FROM my_table B WHERE A.key_values = B.key_values);

(D) Clausola di utilizzo esiste

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) elimina i record duplicati utilizzando le funzioni analitiche di 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
)

Quindi, come mostrato, ci sono molti modi per eliminare le righe duplicate nelle tabelle. Questi comandi possono essere utili in molte situazioni e possono essere utilizzati a seconda dei requisiti. Assicurati sempre di avere a disposizione il backup prima di eseguire qualsiasi istruzione. Dovremmo anche prima trovare il duplicato usando la query e quindi verificarlo prima di commetterlo

come trovare record duplicati in Oracle usando rowid

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

Quindi, prima trova il duplicato utilizzando la query precedente, quindi eliminalo e il conteggio delle eliminazioni dovrebbe essere uguale al conteggio delle righe della query precedente. Ora esegui di nuovo la query trova duplicato. Se non ci sono duplicati, siamo a posto per il commit

Guarda l'articolo di seguito per  approfondire Sql

Tutorial Oracle Sql:contiene l'elenco di tutti gli articoli utili Oracle sql. Esplorali per conoscere Oracle Sql anche se conosci Oracle Sql
Domande sull'intervista Oracle:dai un'occhiata a questa pagina per le 49 domande e risposte principali di Oracle Interview:Nozioni di base, Oracle SQL per aiutarti nelle interviste. Viene fornito anche materiale aggiuntivo
clausola where in Oracle:limitazione del set di dati, clausola where, clausola what is where nell'istruzione sql, funzioni
a riga singola dell'operatore di confronto in Oracle:dai un'occhiata qui per scoprire le funzioni a riga singola in sql, Oracle data functions,Funzioni numeriche in sql ,Funzione carattere in sql
Query Oracle sql
blog.oracle.com