Главная »
2015 » Август » 11 » Как удалять повторяющиеся записи в Oracle
16:03 Как удалять повторяющиеся записи в Oracle |
Как удалять повторяющиеся записи в Oracle
Повторяющиеся строки в Oracle могут быть дифференцированы только с помощью их ‘RowId' (адрес строки).
Шаги
-
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
Удалите все повторяющиеся строки, кроме одной.
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
Используйте функцию 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 |
Добавлять комментарии могут только зарегистрированные пользователи.
[
Регистрация |
Вход ]