Как удалить дублирующиеся записи из таблицы?

dbstalker, 24 марта

Два универсальных способа удаления из таблицы table1 дублирующихся записей по полю pole1:

delete table1 where rowid not in (select min(rowid) from table1 group by pole1);

DELETE FROM table1 WHERE ROWID IN (SELECT LAG (ROWID) OVER (PARTITION BY pole1 ORDER BY pole1) FROM table1)

Приглашаю всех поделиться своими наработками.

2 комментария

Прокоментировать

Alex
24 марта 2010 г. в 17:53

delete from table1
where rowid in
(select rowid
  from
  (select pole1, rowid,
    row_number() over
    (partition by pole1 order by employee_id)
    delete_row
    from table1)
  where delete_row > 1);

kireal
9 апреля 2010 г. в 07:18

drop table kireal.repeat_val;

create table kireal.repeat_val (id varchar2(100)) tablespace EXAMPLE;

insert into kireal.repeat_val
select tablespace_name from dba_tablespaces, (select 1 from dual connect by level<=2);
commit;

select * from kireal.repeat_val;

alter table kireal.repeat_val add constraint for_delete_duplicate unique(id) disable validate

create table kireal.not_repea_val (id varchar2(100)) tablespace EXAMPLE;

alter table kireal.not_repea_val add unique(id);

begin
dbms_errlog.create_error_log('KIREAL.REPEAT_VAL','REPEAT_VAL_ERR');
end;
 
select owner,table_name,tablespace_name from dba_tables where table_name='REPEAT_VAL_ERR';

insert into /*+APPEND*/ kireal.not_repea_val nologging
select * from kireal.repeat_val LOG ERRORS INTO kireal.repeat_val_err('not_unique')
REJECT LIMIT UNLIMITED;

commit;

select * from kireal.repeat_val_err;

truncate table kireal.repeat_val;

insert into /*+APPEND*/ kireal.repeat_val nologging select * from kireal.not_repea_val;
commit;

alter table kireal.repeat_val add constraint for_delete_duplicate unique(id) disable validate;

 

Новый комментарий

Я не спамер: введите суму 6+4



 

От авторов блога

О Блоге - прочитай перед началом.

Задать вопрос и получить ответ - уже решено 94 вопросов

Глоссарий - список терминов и сокращений


 
 

Бизнес форум

Последние темы:

Требуется бухгалтер
21 августа, 1 ответа