Главная » 2015 » Август » 11 » Как удалять повторяющиеся записи в Oracle
16:03
Как удалять повторяющиеся записи в Oracle

Как удалять повторяющиеся записи в Oracle

Повторяющиеся строки в Oracle могут быть дифференцированы только с помощью их ‘RowId' (адрес строки).

Шаги

  1. 1 Удалите строку с помощью rowid. Это самый простой способ удаления записи. SQL > SELECT ROWID,name FROM names; ROWID NAME ------------------ ------------------------------ AABJnsAAGAAAdfOAAA Alan AABJnsAAGAAAdfOAAB Alan AABJnsAAGAAAdfOAAC Carrie AABJnsAAGAAAdfOAAD Tom 4 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 Alan AABJnsAAGAAAdfOAAC Carrie AABJnsAAGAAAdfOAAD Tom 3 ROWS selected.
  2. 2 Удалите все повторяющиеся строки, кроме одной. SQL > SELECT name FROM names; NAME ------------------------------ Alan Carrie Tom Alan 4 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 ------------------------------ Alan Carrie Tom ROWS selected.
  3. 3 Используйте функцию max или min на rowed и удалите все другие строки. В этом случае, если существуют несколько дубликатов, они будут удалены. 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) FROM names 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. }} </ul></li> <li>Продублируйте линию 3 сверху и добавьте новое название столбца, если у вас есть несколько столбцов в таблице. Допустим, что у вас есть столбец возрастов, то команда будет следующей. <br><br>[[Image:DELETE Duplicate Records IN Oracle Step 4.jpg|center|550px]] </ul>{{CodeBox| <source lang="oracle8"> 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) FROM names 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.
Категория: Вопросы и ответы | Просмотров: 344 | | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]