Często musimy znaleźć i usunąć zduplikowane wiersze z tabeli Oracle z wielu powodów w bazie danych. Musimy usunąć, aby często usuwać problemy z danymi. Istnieje wiele sposobów, aby Oracle usunąć zduplikowane wiersze, ale zachowaj oryginał. W tym poście pokażę kilka szybszych metod, aby to osiągnąć. Pokażę metodę, w której rowid jest używany i metodę, w której rowid nie jest używany. Pamiętaj, że musisz zidentyfikować wszystkie kolumny, które powodują, że wiersz jest duplikatem w tabeli, i określić wszystkie te kolumny w odpowiedniej instrukcji usuwania w SQL
Jak usunąć zduplikowane wiersze z Oracle
Oto kilka sposobów na łatwe usuwanie zduplikowanych wierszy
(A) Szybka metoda, ale musisz odtworzyć wszystkie indeksy Oracle, wyzwalacze
create table my_table1 as select distinct * from my_table; drop my_table; rename my_table1 to my_table;
Przykład
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) Jak znaleźć i usunąć zduplikowane rekordy w Oracle za pomocą rowid. Poniższy przykład pokazuje jedną kolumnę. Jeśli usuniesz na podstawie dwóch kolumn, możesz określić dwie kolumny
Delete from my_table where rowid not in ( select max(rowid) from my_table group by my_col_name );
(C) Użyj automatycznego łączenia Oracle, aby usunąć zduplikowane wiersze
DELETE FROM my_table A WHERE ROWID > (SELECT min(rowid) FROM my_table B WHERE A.key_values = B.key_values);
(D) Klauzula „Użyj istnieje”
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) usuwać zduplikowane rekordy podczas korzystania z funkcji analitycznych 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 )
Tak więc, jak pokazano, istnieje wiele sposobów usuwania zduplikowanych wierszy w tabelach. To polecenie może być przydatne w wielu sytuacjach i może być używane w zależności od wymagań. Przed wykonaniem jakichkolwiek instrukcji zawsze upewnij się, że mamy dostępną kopię zapasową. Powinniśmy również najpierw znaleźć duplikat za pomocą zapytania, a następnie zweryfikować go przed zatwierdzeniem
jak znaleźć zduplikowane rekordy w Oracle za pomocą rowid
select * from my_table
where rowid not in
(select max(rowid) from my_table group by column_name);
Więc najpierw znajdź duplikat za pomocą powyższego zapytania, a następnie usuń go, a liczba usunięć powinna być taka sama jak liczba wierszy w powyższym zapytaniu.Teraz ponownie uruchom zapytanie Znajdź duplikat. Jeśli nie ma duplikatu, jesteśmy gotowi do zatwierdzenia
Zapoznaj się z poniższym artykułem, aby zagłębić się w Sql
Samouczki Oracle SQL :zawiera listę wszystkich przydatnych artykułów dotyczących Oracle SQL. Poznaj je, aby dowiedzieć się o Oracle Sql, nawet jeśli znasz Oracle Sql
Pytania do rozmowy kwalifikacyjnej Oracle:Sprawdź tę stronę, aby uzyskać 49 najważniejszych pytań i odpowiedzi dotyczących Oracle do wywiadów:Podstawy, Oracle SQL, aby pomóc Ci w rozmowach kwalifikacyjnych.Dostarczono również dodatkowe materiały
Klauzula where w Oracle :Ograniczanie zbioru danych, klauzula where, klauzula where w instrukcji sql, funkcje jednowierszowe operatora porównania
w Oracle :Sprawdź to, aby dowiedzieć się, jak funkcje jednowierszowe w sql, dane Oracle funkcje,Funkcje numeryczne w sql,Funkcja znakowa w sql
zapytania Oracle sql
blog.oracle.com