当前位置:  开发笔记 > 编程语言 > 正文

从Oracle中删除表中的重复行

如何解决《从Oracle中删除表中的重复行》经验,为你挑选了6个好方法。

我正在Oracle中测试一些东西,并用一些示例数据填充了一个表,但是在这个过程中我不小心加载了重复的记录,所以现在我无法使用某些列创建主键.

如何删除所有重复的行并只留下其中一行?



1> Bill the Liz..:

使用rowid伪列.

DELETE FROM your_table
WHERE rowid not in
(SELECT MIN(rowid)
FROM your_table
GROUP BY column1, column2, column3);

在哪里column1,column2并且column3构成每条记录的识别密钥.您可以列出所有列.


+1我必须找到埋在12,000多条记录中的两个重复的电话号码.将DELETE更改为SELECT,并在几秒钟内找到它们.节省了我很多时间,谢谢.
这种方法对我不起作用.我不知道为什么.当我用"SELECT*"替换"DELETE"时,它返回了我想要删除的行,但是当我用"DELETE"执行时,它只是无限期地挂起.
如果选择有效,但删除没有,则可能是由于生成的子查询的大小.首先使用子查询结果创建一个create table,在min(rowid)列上构建一个索引,然后运行delete语句可能会很有趣.

2> Dead Program..:

从问汤姆

delete from t
 where rowid IN ( select rid
                    from (select rowid rid, 
                                 row_number() over (partition by 
                         companyid, agentid, class , status, terminationdate
                                   order by rowid) rn
                            from t)
                   where rn <> 1);

(修正了缺失的括号)



3> Mark..:

来自DevX.com:

DELETE FROM our_table
WHERE rowid not in
(SELECT MIN(rowid)
FROM our_table
GROUP BY column1, column2, column3...) ;

其中column1,column2等是您要使用的键.



4> 小智..:
DELETE FROM tablename a
      WHERE a.ROWID > ANY (SELECT b.ROWID
                             FROM tablename b
                            WHERE a.fieldname = b.fieldname
                              AND a.fieldname2 = b.fieldname2)


这比巨大的桌子要快得多,比Bill的解决方案要慢.

5> 小智..:
解决方案1)
delete from emp
where rowid not in
(select max(rowid) from emp group by empno);
解决方案2)
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
               );
解决方案3)
delete from emp e1
         where rowid not in
          (select max(rowid) from emp e2
           where e1.empno = e2.empno ); 



6> 小智..:

从t1创建表t2作为select distinct*;

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有