Oracle中删除重复记录
2009-01-07 13:33
253 查看
查找重复记录,比如sprojid是区分记录的key
SQL> select "YSZC115"."TBCDB0"."SPROJID"
2 from "YSZC115"."TBCDB0" group by sprojid having count(sProjID)>1;
SPROJID
------------------------------
0020000200603003001
0020000200603003002
0020000200603003008
0020000200603003009
0020000200603003011
0020000200603003012
0020000200603003013
0020000200603003014
0020000200603003017
0020000200603003020
0020000200603003022
SPROJID
------------------------------
0020000200603003024
0020000200603003025
0020000200603003027
已选择14行。
实际存在的记录:
SQL> select sProjID from yszc115.tbcdb0 where sProjID in (select "YSZC115"."TBCD
B0"."SPROJID"
2 from "YSZC115"."TBCDB0" group by sprojid having count(sProjID)>1);
SPROJID
------------------------------
0020000200603003001
0020000200603003001
0020000200603003002
0020000200603003002
0020000200603003008
0020000200603003008
0020000200603003009
0020000200603003009
0020000200603003011
0020000200603003011
0020000200603003012
SPROJID
------------------------------
0020000200603003012
0020000200603003013
0020000200603003013
0020000200603003014
0020000200603003014
0020000200603003017
0020000200603003017
0020000200603003020
0020000200603003020
0020000200603003022
0020000200603003022
SPROJID
------------------------------
0020000200603003024
0020000200603003024
0020000200603003025
0020000200603003025
0020000200603003027
0020000200603003027
已选择28行。
删除重复的
SQL> delete yszc115.tbcdb0 where sProjID in (select "YSZC115"."TBCDB0"."SPROJID"
2 from "YSZC115"."TBCDB0" group by sprojid having count(sProjID)>1) and
rowid not in
3 (select min(rowid) from yszc115.tbcdb0 group by sprojid having count(sProjI
D)>1);
已删除14行。
删除重复记录的方法原理:
(1).在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在Oracle中的哪一个数据文件、块、行上。
(2).在重复的记录中,可能所有列的内容都相同,但rowid不会相同,所以只要确定出重复记录中那些具有最大rowid的就可以了,其余全部删除。
SQL> select "YSZC115"."TBCDB0"."SPROJID"
2 from "YSZC115"."TBCDB0" group by sprojid having count(sProjID)>1;
SPROJID
------------------------------
0020000200603003001
0020000200603003002
0020000200603003008
0020000200603003009
0020000200603003011
0020000200603003012
0020000200603003013
0020000200603003014
0020000200603003017
0020000200603003020
0020000200603003022
SPROJID
------------------------------
0020000200603003024
0020000200603003025
0020000200603003027
已选择14行。
实际存在的记录:
SQL> select sProjID from yszc115.tbcdb0 where sProjID in (select "YSZC115"."TBCD
B0"."SPROJID"
2 from "YSZC115"."TBCDB0" group by sprojid having count(sProjID)>1);
SPROJID
------------------------------
0020000200603003001
0020000200603003001
0020000200603003002
0020000200603003002
0020000200603003008
0020000200603003008
0020000200603003009
0020000200603003009
0020000200603003011
0020000200603003011
0020000200603003012
SPROJID
------------------------------
0020000200603003012
0020000200603003013
0020000200603003013
0020000200603003014
0020000200603003014
0020000200603003017
0020000200603003017
0020000200603003020
0020000200603003020
0020000200603003022
0020000200603003022
SPROJID
------------------------------
0020000200603003024
0020000200603003024
0020000200603003025
0020000200603003025
0020000200603003027
0020000200603003027
已选择28行。
删除重复的
SQL> delete yszc115.tbcdb0 where sProjID in (select "YSZC115"."TBCDB0"."SPROJID"
2 from "YSZC115"."TBCDB0" group by sprojid having count(sProjID)>1) and
rowid not in
3 (select min(rowid) from yszc115.tbcdb0 group by sprojid having count(sProjI
D)>1);
已删除14行。
删除重复记录的方法原理:
(1).在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在Oracle中的哪一个数据文件、块、行上。
(2).在重复的记录中,可能所有列的内容都相同,但rowid不会相同,所以只要确定出重复记录中那些具有最大rowid的就可以了,其余全部删除。
相关文章推荐
- Oracle删除重复数据记录
- 删除重复记录(Oracle)
- Oracle查询重复数据并删除,只保留一条记录
- Oracle几种查找和删除重复记录的方法总结
- ORACLE 删除重复行,保留一条记录SQL
- Oracle删除重复记录 企业为什么经常使用Oracle?
- ORACLE删除重复记录方法
- Oracle用rowid删除同一张表的重复记录
- ORACLE删除重复记录方法
- Oracle几种查找和删除重复记录的方法总结
- oracle中删除重复记录
- 在Oracle中如何利用Rowid查找和删除表中的重复记录
- Oracle删除重复记录的方法
- ORACLE查询删除重复记录
- Oracle查询重复数据并删除,只保留一条记录
- oracle查询及删除重复记录的SQL语句
- oracle查询重复数据与删除重复记录方法
- Oracle用rowid删除重复记录
- Oracle删除重复记录只保留一条数据的几种方法
- oracle最高效的删除重复记录方法