ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 去除重复记录

去除重复记录

原创 Linux操作系统 作者:jinlonglv 时间:2011-06-03 14:55:45 0 删除 编辑


在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>

补充资料:
select *,row_number() over(order by productname) as rownumber
from products
--上面是正确的,然后我想的是从这个结果集在取10-20之间的数据,然后我书写如下:
select *,row_number() over(order by productname) as rownumber
from products
where rownumber between 10 and 20
--这样报错.然后又找资料看,找不个例子.然后我照那个例子改进
select* from
(select *,row_number() over(order by productname) as rownumber
from products)
as temp
where rownumber between 10 and 20
--这样就对了.

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24177460/viewspace-697079/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-07-01

  • 博文量
    14
  • 访问量
    32036