表T结构如下
COL1
COL2
COL3
中有重复记录(COL1,COL2为主键),如何删除
1、有少数重复记录(在col1,col2上有索引比较好)
DELETE T
WHERE (COL1,COL2) IN
(SELECT COL1,COL2 FROM T GROUP BY COL1,COL2 HAVING COUNT(*) > 1)
AND
ROWID NOT IN
(SELECT MIN(ROWID) FROM T GROUP BY COL1,COL2 HAVING COUNT(*) > 1)
2、大部份记录有重复记录
DELETE T WHERE ROWID NOT IN
(SELECT MIN(ROWID) FROM T GROUP BY COL1,COL2)
3、其他写法
DELETE T WHERE ROWID IN
(SELECT A.ROWID FROM T A,T B
WHERE A.COL1=B.COL1 AND A.COL2 = B.COL2 AND A.ROWID > B.ROWID)
博客介绍了Oracle表T中删除重复记录的方法。表T以COL1、COL2为主键,针对不同重复记录情况给出对应删除语句。少数重复记录且在col1、col2有索引时用一种方法;大部分记录重复时用另一种;还给出了其他写法。
1789

被折叠的 条评论
为什么被折叠?



