Відповіді на всі випадки життя прямо на цьому сайті

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

Кроки

  • Delete Duplicate Records in Oracle Step 1.jpg 1 Видаліть рядок з допомогою rowid. Це найпростіший спосіб видалення запису. SQL > SELECT ROWID,name FROM names; ROWID NAME ------------------ ------------------------------ AABJnsAAGAAAdfOAAA Alan AABJnsAAGAAAdfOAAB Alan AABJnsAAGAAAdfOAAC Carrie AABJnsAAGAAAdfOAAD Tom 4 ROWS selected. SQL > DELETE names FROM WHERE ROWID='AABJnsAAGAAAdfOAAA'; 1 ROW deleted. SQL > COMMIT; COMMIT complete. SQL > SELECT ROWID,name FROM names; ROWID NAME ------------------ -------------------- AABJnsAAGAAAdfOAAB Alan AABJnsAAGAAAdfOAAC Carrie AABJnsAAGAAAdfOAAD Tom 3 ROWS selected.
  • Delete Duplicate Records in Oracle Step 2.jpg 2 Видаліть всі повторювані рядки, крім однієї. SQL > SELECT name FROM names; NAME ------------------------------ Alan Carrie Tom Alan 4 ROWS selected. SQL > DELETE names FROM 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 ------------------------------ Alan Carrie Tom ROWS selected.
  • Delete Duplicate Records in Oracle Step 3.jpg 3 Використовуйте функцію max або min на гріб і видаліть всі інші рядки. У цьому випадку, якщо існують кілька дублікатів, вони будуть видалені. SQL > SELECT ROWID,name FROM names; ROWID NAME ------------------ ------------------------------ AABJnsAAGAAAdfOAAA Alan AABJnsAAGAAAdfOAAB Alan AABJnsAAGAAAdfOAAC Carrie AABJnsAAGAAAdfOAAD Tom AABJnsAAGAAAdfOAAF Alan 5 ROWS selected. SQL > DELETE FROM names a 2 WHERE ROWID > (SELECT MIN(ROWID) names FROM b 3 WHERE b.name=a.name 4 ); 2 ROWS deleted. SQL > SELECT ROWID,name FROM names; ROWID NAME ------------------ ------------------------------ AABJnsAAGAAAdfOAAA Alan AABJnsAAGAAAdfOAAC Carrie AABJnsAAGAAAdfOAAD Tom 3 ROWS selected. SQL > COMMIT; COMMIT complete. }}
  • Продублюйте лінію 3 зверху і додайте новий назву стовпця, якщо у вас є кілька стовпців у таблиці. Припустимо, що у вас є стовпець віку, то команда буде наступною.

    [[Image:DELETE Duplicate Records IN Oracle Step 4.jpg|center|550px]] {{CodeBox| SQL > SELECT * FROM names; NAME AGE ------------------------------ ---------- Alan 50 Carrie 51 Tom 52 Alan 50 4 ROWS selected. SQL > DELETE FROM names a 2 WHERE ROWID > (SELECT MIN(ROWID) names FROM b 3 WHERE b.name=a.name 4 AND b.age=a.age 5 ); 1 ROW deleted. SQL > SELECT * FROM names; NAME AGE ------------------------------ ---------- Alan 50 Carrie 51 Tom 52 ROWS selected. SQL > COMMIT; COMMIT complete.
  • Попередження

    • Створіть резервну копію таблиці, щоб порівняти і показати вміст таблиці до видалення чого-небудь (якщо виникнуть питання). SQL > CREATE TABLE alan.names_backup AS SELECT * FROM names; TABLE created.


    Додати коментар
    Ваше ім'я:  
    Напівжирний Нахилений текст Підкреслений текст Перекреслений текст | Вирівнювання по лівому краю По центру Вирівнювання по правому краю | Вставка смайликів Вибір кольору | Прихований текст Вставка цитати Перетворити вибраний текст з транслітерації в кирилицю Вставка спойлера

    2+2*2=?