在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
--这样就对了.
分享到:
相关推荐
"数据库查询删除重复数据" 数据库查询删除重复数据是数据库管理中的一项重要操作,旨在查找和删除表中的重复记录。...查找和删除重复记录是数据库管理中的一项重要操作,需要根据实际情况选择合适的方法来解决问题。
根据给定文件中的标题、描述、标签以及部分内容,我们可以从中提炼出与DB2数据库相关的多个重要知识点。以下是对这些知识点的详细阐述: ### DB2数据库面试问题概览 #### 1. E-R图中的关系类型及其特点 E-R图...
本文将深入解析db2定时任务的使用方法,包括其基本概念、配置步骤、以及如何通过具体实例来理解和应用这一功能。 ### 基本概念 在DB2中,定时任务(也称为计划任务)允许用户在预定的时间执行特定的SQL语句或程序...
- `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支持通过一个表中的记录来更新另一个表中的数据。这可以通过嵌套查询或JOIN语句实现。 #### 如果显示调用存储过程时传NULL值要注意 在调用存储过程时传递NULL值,需要确保存储过程正确处理这些值,避免出现意外...
4. 删除数据:介绍了DB2中删除数据记录的具体操作。 5. 相关子查询:子查询的使用,以及如何构建关联子查询来满足特定查询需求。 6. 多字段查询:如何在一次查询中返回多个字段的数据。 7. ORDER BY子句:子句中加入...
- `MODIFIED BY delPriorityChar`:指定优先级字符用于处理重复记录,即如果表中存在相同记录,则新加载的数据将不会被添加。 - `REPLACE INTO`:意味着如果表中有相同的记录,则会被替换。 - `NONRECOVERABLE`:...
DB2还支持审计功能,可以记录对数据库的访问行为。 最后,DB2的备份与恢复策略是保证数据完整性和可用性的重要环节。IBM提供了多种备份和恢复选项,包括完整备份、增量备份和差异备份,以及快速恢复技术如日志重放...
DB2编程基础是数据库管理与开发中的重要环节,它涵盖了创建和管理数据库对象、执行SQL语句以及处理数据的各种方法。以下是对DB2编程基础知识的详细说明: 1. **创建存储过程**: - 在创建存储过程时,`CREATE ...
在DB2 UDB V8版本中,IBM进一步优化了产品的性能和易用性,引入了一系列新的特性和改进。 DB2 UDB V8的亮点包括: - **通用访问**:支持多种数据源和数据格式的无缝集成。 - **通用应用**:兼容各种应用程序接口,...
- **UPDATE不能用一个表中的记录为条件修改另一个表中的记录**:需要使用其他方法,如关联查询。 - **如果显示调用存储过程时传NULL值要注意**:避免传递NULL值导致的问题。 #### DB2编程性能注意 - **大数据的导...
DB2支持四种隔离级别:读未提交、读已提交、可重复读和串行化,以适应不同应用的需求。 安全性是DB2的重要组成部分,包括用户认证、权限管理和审计。用户通过用户名和密码登录,DB2提供角色机制来简化权限管理。...
为了避免数据重复,可以在LOAD数据前先执行数据清洗工作,例如使用`DELETE`语句删除重复数据。 **避免DECIMAL类型字段出现问题的方法:** 1. 在LOAD数据时,确保数据格式正确。 2. 使用`TRIM`等函数清理数据。
- **+62501518**:删除操作后,记录未被正确标记为已删除,可能是在数据清理或事务处理中出现的错误。 - **+62601529**:删除操作破坏了UNIQUE或PRIMARY KEY约束,可能是在数据完整性维护中忽略了一些规则。 - **+...
与Sybase或Oracle不同,DB2的临时表在会话结束时自动删除,因此适合于存储临时数据,但不适用于跨会话的数据存储。 #### 1.3 获取当前行 在DB2中,获取当前行可以通过`FETCH FIRST`子句实现。例如: ```sql SELECT...
在DB2中,存储过程可以包含数据查询、插入、更新、删除等操作,甚至可以包含控制流语句(如IF-ELSE,WHILE等)和用户自定义的函数。 二、创建存储过程 在DB2中创建存储过程,需要使用CREATE PROCEDURE语句。例如,...
通过上述对 DB2 错误信息的详细解析,我们不仅了解到了各种错误代码的具体含义,还掌握了解决这些问题的基本方法。这对于日常数据库管理和开发工作都是非常重要的。在遇到类似问题时,可以快速定位并解决问题,提高...