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

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

Кроки

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

    1

    Видаліть рядок за допомогою rowid. Це найпростіший спосіб видалення запису.

    SQL  SELECT ROWID,name FROM names-ROWID NAME------------------ -----------------------------;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-ROWID NAME------------------ -------------------;AABJnsAAGAAAdfOAAB AlanAABJnsAAGAAAdfOAAC CarrieAABJnsAAGAAAdfOAAD Tom3 ROWS selected.




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

    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.



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

    3

    Використовуйте функцію max або min на rowed і видаліть всі інші рядки. У цьому випадку, якщо існують кілька дублікатів, вони будуть видалені.

    SQL  SELECT ROWID,name FROM names-ROWID NAME------------------ -----------------------------;AABJnsAAGAAAdfOAAA AlanAABJnsAAGAAAdfOAAB AlanAABJnsAAGAAAdfOAAC CarrieAABJnsAAGAAAdfOAAD TomAABJnsAAGAAAdfOAAF Alan5 ROWS selected.SQL  DELETE FROM names a2WHERE ROWID  (SELECT MIN(ROWID) FROM names b3 WHERE b.name=a.name4)-2 ROWS deleted.SQL  SELECT ROWID,name FROM names-ROWID NAME------------------ -----------------------------;AABJnsAAGAAAdfOAAA AlanAABJnsAAGAAAdfOAAC CarrieAABJnsAAGAAAdfOAAD Tom3 ROWS selected.SQL  COMMIT-COMMIT complete.}}ulli<</span>liПродублюйте лінію 3 зверху і додайте нову назву стовпця, якщо у вас є декілька стовпців в таблиці. Припустимо, що у вас є стовпець віків, то команда буде наступною. <</span>brbr[[Image:DELETE Duplicate Records IN Oracle Step 4.jpg|center|550px]]ul{{CodeBox|<</span>source lang="Oracle8"SQL  SELECT * FROM names-NAME AGE------------------------------ ---------;Alan 50Carrie 51Tom52Alan 504 ROWS selected.SQL  DELETE FROM names a2WHERE ROWID  (SELECT MIN(ROWID) FROM names b3 WHERE b.name=a.name4 AND b.age=a.age5)-1 ROW deleted.SQL  SELECT * FROM names-NAME AGE------------------------------ ---------;Alan 50Carrie 51Tom52ROWS selected.SQL  COMMIT-COMMIT complete.

Попередження

  • Створіть резервну копію таблиці, щоб порівняти і показати зміст таблиці до видалення чого-небудь (якщо виникнуть питання).

    SQL  CREATE TABLE alan.names_backup AS SELECT * FROM names-TABLE created.