专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

DB2删除重复数据 db2删除重复数据语句

ins518 2024-11-11 13:38:07 技术文章 6 ℃ 0 评论

俗话说常在河边走,哪能不湿鞋。跟数据库打交道,写程序写多了总会遇到由于各种原因导致的重复数据,处理重复数据是一件很那啥的事情(那啥,那啥,呵呵)。由于平时工作用的是DB2数据库,以下以DB2为例。

由于db2没有oracle的那种可以显式使用rowid的那种方法,所以处理重复数据比较麻烦。以下是根据网上的资料总结的两种方法:


1.方法一:

SELECT ROWNUMBER() OVER(PARTITION BY NAME) AS ROWNO,NAME,TBNAME FROM SYSIBM.SYSCOLUMNS WHERE NAME IN( 'ALTER_TIME','AGENT_ID');

ROWNUMBER() OVER(PARTITION BY NAME) AS ROWNO :分组生成行号并定义别名

PARTITION BY NAME:分组条件,NAME是数据列的名字,可以是多列

删除重复数据:

DELETE FROM (SELECT ROWNUMBER() OVER(PARTITION BY NAME) AS ROWNO,NAME,TBNAME FROM SYSIBM.SYSCOLUMNS WHERE NAME IN( 'ALTER_TIME','AGENT_ID')) WHERE ROWNO >1;

(不要试图执行这句话,这句话只是要展示删除数据的语法格式。SYSIBM.SYSCOLUMNS是DB2的系统表,不知道运行以后会有什么结果,至少我没试过,有兴趣的可以试试,)

过滤重复数据:

SELECT * FROM (SELECT ROWNUMBER() OVER(PARTITION BY NAME) AS ROWNO,NAME,TBNAME FROM SYSIBM.SYSCOLUMNS WHERE NAME IN( 'ALTER_TIME','AGENT_ID')) WHERE ROWNO = 1;

2.方法二:

SELECT RANK() OVER(PARTITION BY NAME ORDER BY TBNAME ASC) AS ROWNO,NAME,TBNAME FROM SYSIBM.SYSCOLUMNS WHERE NAME IN( 'ALTER_TIME','AGENT_ID');

两种方法都能实现效果,据说方法二更好一点。就俺这水平要真测试哪种更好还真有点难为了。呵呵,管他呢,那谁不是说过吗,管他黑猫白猫,能抓耗子就是好猫。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表