2015-07-09 4 views

ответ

2

Если вы хотите сохранить одну запись для каждого имени:

delete from ap 
    where ap.id > (select min(ap2.id) from ap ap2 where ap2.name = ap.name) 
+0

его работы .. спасибо много @Gordon Linoff –

0
delete from table_name a 
where 
a.rowid > any (select b.rowid from table_name b where a.col1 = b.col1 and a.col2 = b.col2); 
0

Delete from ap where ap.rowid not in (select min (rowid) from ap a group by a.name);

Это удалит дубликаты, тройные так далее. Он сохранит одно происхождение для одной записи. Min (rowid) или max (rowid) вам нужно выбрать либо вы хотите сохранить первую/старую вставленную запись, либо последнюю/последнюю вставленную запись.

0

Попробуйте это; Внутренний запрос возвращает все max rowid на основе предложения group by, которое здесь является именем, поэтому только один rowid для всех дубликатов записей. delete будет содержать только те строки и удалять все остальные, которые дублируются.

delete from ap where rowid not in (select max(rowid) from ap group by name); 
2

1. Раствор

delete from emp 
    where rowid not in 
    (select max(rowid) from emp group by empno); 

2. sloution

delete from emp where rowid in 
       (
       select rid from 
        (
        select rowid rid, 
         row_number() over(partition by empno order by empno) rn 
         from emp 
       ) 
       where rn > 1 
       ); 
Смежные вопросы