Oracle 怎样删除表中重复的行

如题所述

删除重复行有两种方法:

数据准备
建表语句
create table a(a varchar2(10),b varchar2(20));
插入数据
insert into a values('11','22');
insert into a values('11','22');
insert into a values('11','22');
insert into a values('aa','bb');
insert into a values('aa','bb');
insert into a values('cc','dd');
commit;

克隆一张表
create table test as (select * from a);
查询(1)select * from test
1 11 22
2 11 22
3 11 22
4 aa bb
5 aa bb
6 cc dd
(2)
select distinct * from test;
1 11 22
2 cc dd
3 aa bb

1)利用中间表法:create table test_copy as (select distinct * from test);

然后删除原表 drop table test;

create table test as (select * from test_copy);

然后就完成了。

2)利用rowid法

sql语句如下:

delete from test t where rowid not in(
select max(rowid) from test p where t.a=p.a and t.b=p.b);
commit;
温馨提示:内容为网友见解,仅供参考
第1个回答  2017-05-16
可以先查询这个表的数据去重复,然后把表的数据删除,重新插入

oracle数据库中怎样删除一个表的重复数据。
这个问题就是要删除表中重复的记录,查询的sql语句如下:select id,name from (select id,name,row_numer() over(partition by id,name order by id,name) rn from tableA)where rn>1;删除的sql语句如下:DELETE tableA WHERE ROWNUM = (SELECT ROWNUM FROM (SELECT id,name,ROW_NUMBER() OVER...

oracle中怎样排除重复记录
1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 where Id in (select Id from 表 group byId having count(Id) > 1)2、删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录 DELETE from 表 WHERE (id) IN ( SELECT id F...

oracle真正高效的删除重复记录怎么写
用过程跑,往另一个临时表中插数据(发现有重复就不插),然后把该表truncate掉,然后交换分区。过程按主键分通道跑(每个通道处理一部分数据,如id在0-10、11-20、21-30等,如果是分区表则按分区跑更好),应该20个通道差不多。

请问一下怎样删除考勤表行中大量重复数据?
oracle:delete from table1 a where rowid !=(select max(rowid)from table1 b where a.name1=b.name1 and a.name2=b.name2……)

SQL语句查询 如何删除重复多余的数据
Select distinct +字段+from+表名+条件 xindeluoye | 发布于2012-07-03 举报| 评论 0 1 delete from 表名 where 列名 not in "2012050111"。可以把2012050111以外都删除。 热心网友| 发布于2012-07-03 举报| 评论 0 3 其他1条回答 为您推荐: 数据透视表 sql语句删除重复数据 sql语句行重复 ...

Oracle中怎样删除没有主键的表的任何一条记录?
可以根据rowid删除,每一条记录都有唯一的rowid。可以通过:SELECT a.*,rowid FROM a;查看rowid

oracle清空表内的数据
用truncate、delete都可以,比如要清空一个名为abc的表,就这样写sql:truncate table abc;或者:delete from abc;

oracle数据库怎样删除所有表中的某列值为1的数据?
另外还可以有个办法,建立在你对数据库非常清楚的前提下 不管什么数据库表名、字段名、索引名、主键名、用户数据库状态等信息都会写在master库中,在这个库中你可以取得所有表名,通过查询指定系统表产生指定条件的删除语句的查询结果,你另存出来就可以直接执行了。

oracle 导入时,数据表已经存在,怎样 不删除数据的同时用导入的表结构...
改原来的表名称,或者改导入的表名称,总之不能重名。

...相同的表,但表的数据记录略有不同,怎样比较出重复数据并显示?_百度...
首先在B库里查出那些数据是重复的:select * from tablename b where b.id in ( select id from tablename group by id having count(id)>1);然后就是把这些多余数据删除了,这个问题就比较简单了,你自己写吧,可以把上面的查询语句作为子查询放进去。挺简单的,自己动手试试。

相似回答