Oracle
 sql >> Baza danych >  >> RDS >> Oracle

usuń zduplikowane wiersze z Oracle

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przekazywanie tablicy danych jako parametru wejściowego do procedury Oracle

  2. Wsparcie Spring JDBC i duży zbiór danych

  3. FNDCPASS &AFPASSWD

  4. Metoda gromadzenia:procedura DELETE w bazie danych Oracle

  5. Oracle 11g — Sprawdź ograniczenie za pomocą RegEx