删除重复信息且要保留一条的(roacle的rowid另类用法)
由于表的主键失效了(disable),导致导入了一些主键重复的数据,想保留唯一的一条,
最后发现其实可以用rowid来实现,不知道算不算是rowid的另类用法。
1 delete /*+ parallel(16) */ 2 tablename a 3 WHERE EXISTS 4 (SELECT 'x' 5 FROM (SELECT rgtno,customerno 6 FROM tablename b 7 GROUP BY column1,column2 8 having count(1) > 1) tab 9 WHERE a.column1 = tab.column1 10 and a.column2 = tab.column2) --删除重复的数据 11 and rowid not in 12 (SELECT max(rowid) 13 FROM tablename c 14 GROUP BY column1,column2 15 having count(1) > 1); --保留rowid最大的一条