Самый быстрый способ для действительно больших таблиц
- Создать таблицу исключений со структурой ниже: exceptions_table
ROW_ID ROWID
OWNER VARCHAR2(30)
TABLE_NAME VARCHAR2(30)
CONSTRAINT VARCHAR2(30)
- Попробуйте создать уникальное ограничение или первичный ключ, который будет нарушен по дубликатам. Вы получите сообщение об ошибке, потому что у вас есть дубликаты. Таблица исключений будет содержать rowids для повторяющихся строк.
alter table add constraint
unique --or primary key
(dupfield1,dupfield2) exceptions into exceptions_table;
- Присоединитесь к вашей таблице с помощью exceptions_table по rowid и delete dups
delete original_dups where rowid in (select ROW_ID from exceptions_table);
- Если количество строк для удаления велико, тогда создайте новую таблицу (со всеми грантами и индексы), которые объединяются с exceptions_table по rowid и переименовывают исходную таблицу в таблицу original_dups и переименовывают new_table_with_no_dups в исходную таблицу
create table new_table_with_no_dups AS (
select field1, field2 ........
from original_dups t1
where not exists ( select null from exceptions_table T2 where t1.rowid = t2.row_id )
)
задан iki93 31 December 2018 в 13:59
поделиться