重复数据:选择,删除,保留min(rowid) max(rowid)
2010-12-30
Database:oracle9i
表:peng_tb_vip
由于表数据太多,不便于选出来,故count;
Select count(*) from peng_tb_vip
SQL> Select count(*) from peng_tb_vip;
COUNT(*)
----------
152
(一):整个行数据重复
如果整个表peng_tb_vip 行重复,则加distinct,,即可去掉重复的数据。
Select distinct * from peng_tb_vip;
(二)多个字段重复
字段:corpid,cust_code;
l 生成临时表
CREATE TABLE PENG_TB_VIP2 AS SELECT * FROM PENG_TB_VIP;
l 删除重复记录,保留最小ROWID;
这里用两个字段作为where,表a,b必须都是在同表做操作;
DELETE FROM PENG_TB_VIP2 aWHERE ROWID>(SELECT MIN(ROWID) FROM PENG_TB_VIP2 bwhere a.corpid=b.corpidand a.cust_code=b.cust_code);commit;
l 由于是保留最小的ROWid,将表peng_tb_vip2规范一下;
Alter table peng_tb_vip2 rename to peng_tb_vip_min
l 删除重复记录,保留最大的ROWID;
CREATE TABLE PENG_TB_VIP_maxAS SELECT * FROM PENG_TB_VIP;
delete from peng_TB_VIP_MAX AWHERE ROWIDSELECT MAX(ROWID) FROM PENG_TB_VIP_MAX B where a.corpid=b.corpidand a.cust_code=b.cust_code);commit;
l 验证数据,查询数据在column corpid,cust_code是否有重复的:
SQL> select corpid,cust_code,vip_name from peng_tb_vip_min;
CORPID CUST_CODE VIP_NAME
-------------------- -------------------- ----------------
RMA ZYSH01 刘婕
XANDER DRFSH01 叶刚
XANDER DRFGD08 刘建荣
XANDER ZYSH01 邓梵
XANDER DRFJS26 徐先生
XANDER DRFJS08 朱广林
XANDER DRFJS16 何庆
XANDER DRFSH04 吴春艺
XANDER ZYZMSH02 张建青
XANDER HYDGD17 覃进飞
XANDER ZYBLAH01 杨平
11 rows selected
通过上面可以看到没有两列都重复的。
查看数据为max(rowid)的表
SQL> select corpid,cust_code,vip_name from peng_tb_vip_max;
CORPID CUST_CODE VIP_NAME
-------------------- -------------------- ----------------
XANDER DRFSH01 陆佳源
XANDER DRFGD08 刘建荣
RMA ZYSH01 邓梵
XANDER DRFJS26 徐先生
XANDER DRFJS16 何庆
XANDER DRFJS08 宜磊
XANDER DRFSH04 李然
XANDER ZYZMSH02 张鹏
XANDER HYDGD17 覃进飞
XANDER ZYSH01 王龙双
XANDER ZYBLAH01 胡安
11 rows selected
从上面可以看出和peng_tb_vip_min表中数据不相同。这里我没有把rowid查询出来。
如果要查询,只要在select 后面加上字段rowid即可。
(三) 有的时候,表中需要存放两条数据,不需要把所有重复数据删除,这时候可以这样做:创建一个表,存有最小ROWID和最大ROWID;
create table peng_tb_vip_min_maxas select * from peng_tb_vip2union allselect * from peng_tb_vip_max;
SQL> select corpid,cust_code,vip_name from peng_tb_vip_min_max;
CORPID CUST_CODE VIP_NAME
-------------------- -------------------- ----------------
RMA ZYSH01 刘婕
XANDER DRFSH01 叶刚
XANDER DRFGD08 刘建荣
XANDER ZYSH01 邓梵
XANDER DRFJS26 徐先生
XANDER DRFJS08 朱广林
XANDER DRFJS16 何庆
XANDER DRFSH04 吴春艺
XANDER ZYZMSH02 张建青
XANDER HYDGD17 覃进飞
XANDER ZYBLAH01 杨平
XANDER DRFSH01 陆佳源
XANDER DRFGD08 刘建荣
RMA ZYSH01 邓梵
XANDER DRFJS26 徐先生
XANDER DRFJS16 何庆
XANDER DRFJS08 宜磊
XANDER DRFSH04 李然
XANDER ZYZMSH02 张鹏
XANDER HYDGD17 覃进飞
CORPID CUST_CODE VIP_NAME
-------------------- -------------------- ----------------
XANDER ZYSH01 王龙双
XANDER ZYBLAH01 胡安
22 rows selected
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22934571/viewspace-1043876/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22934571/viewspace-1043876/
本文介绍在Oracle 9i数据库中如何处理表peng_tb_vip中的重复数据,包括使用DISTINCT去除整行重复数据、保留最小或最大ROWID的方法以及创建包含最小和最大ROWID的表来保存关键数据。
1076

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



