前言:首先你的表資料低于100萬,如果大于話,我的這方法效率就低了!
1.當一張表有重復值時,首先你要明確的指出自己所需要的資料,然后在去重。
2.如果你希望這個欄位是唯一,那么你就在 partition by 后面加上這個欄位;
如果你希望兩個欄位組合唯一,則在 partition by 后面加上這兩個欄位;
如果你希望是三個欄位組合唯一,則在 partition by 后面加上這三個欄位;
以此論推你想幾個欄位組合唯一,就在 partition by 后面加上這幾個欄位;
3.選擇上面你需要的模式去重,只要把排序后大于等于2的刪掉就可以了!
實體陳述句:delete from table where rowid in(select rowid from (
select id,name,row_number() over(partition by id order by 1) b from table) where b>=2);
解釋:根據ORACLE 自帶的虛列 ROWID ,根據它進行洗掉,先把重復資料給查詢出來,也就是把排序后的結果大于等于2的資料rowid,這些資料就是我們要洗掉的資料;
注:table是表
row_number 是分析函式
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/98114.html
標籤:其他數據庫
下一篇:sql陳述句求解~
