3 回答

TA貢獻1946條經(jīng)驗 獲得超4個贊
如何攻擊表中的dup的一般方法如下。
1)定義唯一鍵列 - 我在我的例子中使用 KEY1, KEY2
2) 定義標識順序的列 - 保留最高值,所有其他值都被視為dups。我用ORDER1
例子
create table tab as
select 1 key1, 1 key2, 1 order1 from dual union all -- dup
select 1 key1, 1 key2, 2 order1 from dual union all -- dup
select 1 key1, 1 key2, 3 order1 from dual union all
select 1 key1, 2 key2, 1 order1 from dual union all
select 2 key1, 1 key2, 1 order1 from dual union all -- dup
select 2 key1, 1 key2, 2 order1 from dual union all
select 2 key1, 2 key2, 1 order1 from dual;
此查詢標識重復(fù)的行
select KEY1, KEY2, ORDER1 from
(select tab.*,
row_number() over (partition by key1, key2 order by order1 desc) as rn
from tab)
where rn > 1
KEY1 KEY2 ORDER1
---------- ---------- ----------
1 1 2
1 1 1
2 1 1
并且此查詢刪除重復(fù)項
delete from tab where (KEY1, KEY2, ORDER1) in
(select KEY1, KEY2, ORDER1 from
(select tab.*,
row_number() over (partition by key1, key2 order by order1 desc) as rn
from tab)
where rn > 1)
將您的表名和列名替換為TAB,KEY1, KEY2和ORDER1。
添加回答
舉報