Загрузить PDF
Загрузить PDF
Повторяющиеся строки в Oracle могут быть дифференцированы только с помощью их ‘RowId' (адрес строки).
Шаги
-
Удалите строку с помощью 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 .
-
Удалите все повторяющиеся строки, кроме одной.
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 . -
Используйте функцию 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 | 550 px ]] </ 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 .
Реклама
Реклама