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