Як видаляти повторювані записи в oracle

Повторювані рядки в Oracle можуть бути диференційовані тільки за допомогою їх `RowId` (адреса рядка).

кроки

  1. Delete Duplicate Records in Oracle Step 1
1. Видаліть рядок за допомогою rowid. Це найпростіший спосіб видалення запису.
SQL> select rowid, name from names-ROWIDNAME ------------------ ---------------------- -------- AABJnsAAGAAAdfOAAA AlanAABJnsAAGAAAdfOAAB AlanAABJnsAAGAAAdfOAAC CarrieAABJnsAAGAAAdfOAAD Tom4 rows selected.SQL> delete from names where rowid = `AABJnsAAGAAAdfOAAA`-1 row deleted.SQL> commit-Commit complete.SQL> select rowid, name from names-ROWIDNAME ------------------ -------------------- AABJnsAAGAAAdfOAAB AlanAABJnsAAGAAAdfOAAC CarrieAABJnsAAGAAAdfOAAD Tom3 rows selected.
  • Delete Duplicate Records in Oracle Step 2
    2. Видаліть всі повторювані рядки, крім однієї.
    SQL> select name from names-NAME ------------------------------ AlanCarrieTomAlan4 rows selected.SQL> delete from names where name = `Alan`-2 rows deleted.SQL> commit-Commit complete.SQL> insert into names values (`Alan`) - 1 row created.SQL> commit-Commit complete.SQL> select * from names-NAME ------------------------------ AlanCarrieTomrows selected.
  • Delete Duplicate Records in Oracle Step 3
    3. Використовуйте функцію max або min на rowed і видаліть всі інші рядки. В цьому випадку, якщо існують кілька дублікатів, вони будуть видалені.
    SQL> select rowid, name from names-ROWIDNAME ------------------ ---------------------- -------- AABJnsAAGAAAdfOAAA AlanAABJnsAAGAAAdfOAAB AlanAABJnsAAGAAAdfOAAC CarrieAABJnsAAGAAAdfOAAD TomAABJnsAAGAAAdfOAAF Alan5 rows selected.SQL> delete from names a2where rowid> (select min (rowid) from names b3where b.name = a.name4) -2 rows deleted.SQL> select rowid, name from names-ROWIDNAME ------------------ ---------------------- -------- AABJnsAAGAAAdfOAAA AlanAABJnsAAGAAAdfOAAC CarrieAABJnsAAGAAAdfOAAD Tom3 rows selected.SQL> commit-Commit complete.}}
  • Продублюйте лінію 3 зверху і додайте нову назву стовпчика, якщо у вас є кілька стовпців в таблиці. Припустимо, що у вас є стовпець віку, то команда буде наступною.

    [[Image: Delete Duplicate Records in Oracle Step 4.jpg | center | 550px]] {{CodeBox | lang = "oracle8"> SQL> select * from names-NAMEAGE ------------------------------ ------ ---- Alan50Carrie51Tom52Alan504 rows selected.SQL> delete from names a2where rowid> (select min (rowid) from names b3where b.name = a.name4and b.age = a.age5) -1 row deleted.SQL> select * from names-NAMEAGE ------------------------------ ---------- Alan50Carrie51Tom52rows selected.SQL> commit-Commit complete.
  • попередження

    • Створіть резервну копію таблиці, щоб порівняти і показати вміст таблиці до видалення чого-небудь (якщо виникнуть питання).
    SQL> create table alan.names_backup as select * from names-Table created.
    Cхоже