欢迎光临Thomas zhang的杂货铺
DB2中删除重复记录的方法
上一篇 /
下一篇 2009-03-02 00:00:00
/ 个人分类:解决方案
这个问题捆饶了我好几个小时,一直没找到有效的解决方法,今天碰到高手了,问题终于得到解决.
在DB2中不象Oracle那样可以借助rowid,rownum等伪列来删除重复的记录,也没有有效的方法可以在一个SQL中直接删除记录.但可以借助row_number() over()语法和视图的方式将重复的记录删除.
下面看一个实际的测试DEMO
方法一:借助视图来实现
SQL> create table zrp (no int);
DB20000I SQL命令成功完成。
SQL> insert into zrp values(1);
DB20000I SQL命令成功完成。
SQL> insert into zrp values(1);
DB20000I SQL命令成功完成。
SQL> insert into zrp values(2);
DB20000I SQL命令成功完成。
SQL> insert into zrp values(2);
DB20000I SQL命令成功完成。
SQL> select * from zrp;
NO
-----------
1
1
2
2
4 条记录已选择。
SQL> create view v_zrp as select no,row_number() over(partition by no) as row_seq from zrp;
DB20000I SQL命令成功完成。
SQL> select * from v_zrp;
NO ROW_SEQ
----------- --------------------
1 1
1 2
2 1
2 2
4 条记录已选择。
SQL> delete from v_zrp where row_seq=2;
DB20000I SQL命令成功完成。
SQL> select * from v_zrp;
NO ROW_SEQ
----------- --------------------
1 1
2 1
2 条记录已选择。
SQL> select * from zrp;
NO
-----------
1
2
2 条记录已选择。
SQL>方法二:借助row_number() 函数来实现
D:DB2BIN>db2 -td;
SQL> select * from zrp;
NO
-----------
1
1
2
2
4 条记录已选择。
SQL> delete from (select no,row_number() over(partition by no) as row_seq from zrp) t where t.row_seq>1;
DB20000I SQL命令成功完成。
SQL> select * from zrp;
NO
-----------
1
2
2 条记录已选择。
SQL>
e-^I1Vq8K$|*xG A:vz7W&O0
导入论坛
引用链接
收藏
分享给好友
推荐到圈子
管理
举报
TAG: