`
tristan_wang
  • 浏览: 166826 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

转:DB2中删除重复记录的方法

阅读更多
转:原文地址:http://space.itpub.net/785478/viewspace-571160
这个问题捆饶了我好几个小时,一直没找到有效的解决方法,今天碰到高手了,问题终于得到解决.

在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
--这样就对了.

分享到:
评论

相关推荐

    数据库 查询删除重复数据

    可以使用以下 SQL 语句来查找和删除重复记录: ``` -- 查找重复记录 select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) -- 删除重复记录,只...

    学习笔记:DB2+9+基础.pdf

    `查询表中的所有记录。 ##### 3. COMMIT和ROLLBACK语句及事务边界 - **事务**:一系列SQL命令的集合,被视为一个不可分割的工作单元。 - **COMMIT**:提交事务,使其更改永久生效。 - **ROLLBACK**:撤销未提交的...

    DB2 SQL 精萃.pdf

    4. 删除数据:介绍了DB2中删除数据记录的具体操作。 5. 相关子查询:子查询的使用,以及如何构建关联子查询来满足特定查询需求。 6. 多字段查询:如何在一次查询中返回多个字段的数据。 7. ORDER BY子句:子句中加入...

    DB2错误码大全

    - **+2007 (01602)**:DB2系统日志中未记录相关信息。 #### 负数错误码 - **-007 (42601)**:SQL语句语法错误。 - **-010 (42603)**:标识符非法,可能包含特殊字符或保留字。 - **-029 (42601)**:语句中缺少INTO...

    db2数据库面试问题

    根据给定文件中的标题、描述、标签以及部分内容,我们可以从中提炼出与DB2数据库相关的多个重要知识点。以下是对这些知识点的详细阐述: ### DB2数据库面试问题概览 #### 1. E-R图中的关系类型及其特点 E-R图...

    DB2使用经验积累及心得

    - **UPDATE不能用一个表中的记录为条件修改另一个表中的记录**:需要使用其他方法,如关联查询。 - **如果显示调用存储过程时传NULL值要注意**:避免传递NULL值导致的问题。 #### DB2编程性能注意 - **大数据的导...

    DB2 数据库日常操作

    - `MODIFIED BY delPriorityChar`:指定优先级字符用于处理重复记录,即如果表中存在相同记录,则新加载的数据将不会被添加。 - `REPLACE INTO`:意味着如果表中有相同的记录,则会被替换。 - `NONRECOVERABLE`:...

    DB2错误日志

    DB2错误日志中记录的信息包含了各种错误代码、状态码以及具体的错误描述,这些信息对于理解和解决DB2中的问题至关重要。 #### SQLCODE与SQLSTATE 在DB2错误日志中,SQLCODE和SQLSTATE是最常见的两个用于标识错误的...

    db2 常用命令集合

    - `db2 import to c:\dftz.txt of del commitcount 5000 messages c:\dftz.msg insert into dftz`:从`c:\dftz.txt`导入数据到表`dftz`,每次提交5000条记录,并将导入过程中产生的消息写入`c:\dftz.msg`文件。...

    DB2异常SQLCODE信息

    - **+62501518**:删除操作后,记录未被正确标记为已删除,可能是在数据清理或事务处理中出现的错误。 - **+62601529**:删除操作破坏了UNIQUE或PRIMARY KEY约束,可能是在数据完整性维护中忽略了一些规则。 - **+...

    DB2State错误码

    在数据库管理与维护中,了解并正确解读DB2State错误码是至关重要的。DB2State错误码是IBM DB2数据库系统在执行SQL语句或其他操作时遇到问题时返回的错误指示符。每个错误码都由SQLCODE和SQLSTATE两部分组成,其中...

    db2常用问题处理

    - **插入记录**:`INSERT INTO`用于将数据插入表中,如`insert into zjt_tables select * from tables;` - **创建视图**:`CREATE VIEW`用于创建视图,如`create view V_zjt_tables as select tabschema, tabname ...

    DB2编程基础DB2编程基础DB2编程基础

    DB2编程基础是数据库管理与开发中的重要环节,它涵盖了创建和管理数据库对象、执行SQL语句以及处理数据的各种方法。以下是对DB2编程基础知识的详细说明: 1. **创建存储过程**: - 在创建存储过程时,`CREATE ...

    db2错误信息集合

    通过上述对 DB2 错误信息的详细解析,我们不仅了解到了各种错误代码的具体含义,还掌握了解决这些问题的基本方法。这对于日常数据库管理和开发工作都是非常重要的。在遇到类似问题时,可以快速定位并解决问题,提高...

    db2常见错误码及释义

    在使用DB2数据库管理系统的过程中,用户可能会遇到各种各样的错误提示。这些错误提示通常包含一个SQLCODE和SQLSTATE值,用来指示具体发生了什么类型的错误。理解这些错误码的意义对于快速定位问题、解决问题至关重要...

    db2新手快速入门教程

    在DB2 UDB V8版本中,IBM进一步优化了产品的性能和易用性,引入了一系列新的特性和改进。 DB2 UDB V8的亮点包括: - **通用访问**:支持多种数据源和数据格式的无缝集成。 - **通用应用**:兼容各种应用程序接口,...

    db2定时任务 使用说明

    本文将深入解析db2定时任务的使用方法,包括其基本概念、配置步骤、以及如何通过具体实例来理解和应用这一功能。 ### 基本概念 在DB2中,定时任务(也称为计划任务)允许用户在预定的时间执行特定的SQL语句或程序...

Global site tag (gtag.js) - Google Analytics