查看: 8808|回复: 6

[精华] 如何删除表中的前n条记录

[复制链接]
论坛徽章:
0
跳转到指定楼层
1#
发表于 2006-6-14 13:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的DB2是V7,好像不支持row_number() over()这个函数,哪位高人能不吝赐教,感激!
论坛徽章:
71
马上加薪
日期:2014-02-19 11:55:14ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412010广州亚运会纪念徽章:橄榄球
日期:2011-05-22 10:54:33管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:012010年世界杯参赛球队:丹麦
日期:2010-04-06 10:23:36
2#
发表于 2006-6-15 07:25 | 只看该作者
给这个表建一个sequence,然后删除前几行的记录

使用道具 举报

回复
论坛徽章:
0
3#
 楼主| 发表于 2006-6-15 09:09 | 只看该作者
这样恐怕不行,假如有5条记录,序号是1、2、3、4、5,由于一些原因,第1条被删除了;此时,我想删除该表的前2条记录,则只有序号为2的那条会被删除,而实际上我是想删除序号为2、3的两条。

使用道具 举报

回复
论坛徽章:
3
会员2007贡献徽章
日期:2007-09-26 18:42:10授权会员
日期:2007-10-23 20:58:17优秀写手
日期:2014-03-01 06:00:03
4#
发表于 2006-6-15 13:33 | 只看该作者
先用row_number() over()或fetch first n rows only生成一个临时表

然后问题转化为:删除本表中与另一个表中所有相同记录的问题

使用道具 举报

回复
论坛徽章:
3
会员2007贡献徽章
日期:2007-09-26 18:42:10授权会员
日期:2007-10-23 20:58:17优秀写手
日期:2014-03-01 06:00:03
5#
发表于 2006-6-15 14:11 | 只看该作者
刚刚试了以下V7好象不支持delete from ... where in ...,
只好用脚本了。
db2 => select * from t2;

C1          C2                        
----------- --------------------------
          1 2006-06-15-13.56.10.335031
          2 2006-06-15-13.56.16.688906
          3 2006-06-15-13.56.18.091722
          4 2006-06-15-13.56.19.215765
          5 2006-06-15-13.56.20.180413
          6 2006-06-15-13.56.21.040426
          7 2006-06-15-13.56.22.372002

  7 record(s) selected.

db2 => quit;
DB20000I  The QUIT command completed successfully.
$ db2 "delete from t2 b where b.c1 in (select a.c1 from t2 a fetch first 1 rows only)"
DB21034E  The command was processed as an SQL statement because it was not a
valid Command Line Processor command.  During SQL processing it returned:
SQL0104N  An unexpected token "delete from t2 b where b.c1 in (select a.c" was
found following "BEGIN-OF-STATEMENT".  Expected tokens may include:  
"<values>".  SQLSTATE=42601
$ db2 "delete from t2 b where b.c1 = (select a.c1 from t2 a fetch first 1 rows only)"
DB21034E  The command was processed as an SQL statement because it was not a
valid Command Line Processor command.  During SQL processing it returned:
SQL0104N  An unexpected token "delete from t2 b where b.c1 = (select a.c1" was
found following "BEGIN-OF-STATEMENT".  Expected tokens may include:  
"<values>".  SQLSTATE=42601
$ db2 "select a.c1 from t2 a fetch first 1 rows only"

C1         
-----------
          1

  1 record(s) selected.

$ db2 -x select a.c1 from t2 a fetch first 2 rows only
          1
          2
$ for i in `db2 -x select a.c1 from t2 a fetch first 2 rows only`; do db2 "delete from t2 b where b.c1 = $i"; done
DB20000I  The SQL command completed successfully.
DB20000I  The SQL command completed successfully.
$ db2 "select * from t2"

C1          C2                        
----------- --------------------------
          3 2006-06-15-13.56.18.091722
          4 2006-06-15-13.56.19.215765
          5 2006-06-15-13.56.20.180413
          6 2006-06-15-13.56.21.040426
          7 2006-06-15-13.56.22.372002

  5 record(s) selected.


$ db2level
DB21085I  Instance "ldapdb2" uses DB2 code release "SQL07020" with level
identifier "03010105" and informational tokens "DB2 v7.1.0.40", "s010415" and
"U475375".

$

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2007-07-31 11:25:35
6#
发表于 2006-9-5 16:17 | 只看该作者

easy to process

CREATE TABLE SAMSON_ZHU.T1
(C1  INTEGER,
  C2  INTEGER
)
-----------------------------------------------------
INSERT INTO T1 VALUES(100,123),
(101,123),
(102,123),
(103,123),
(104,123),
(105,123),
(106,123)
-------------------------------------

DELETE FROM T1 WHERE C1 IN (SELECT C1 FROM T1 FETCH FIRST 3 ROWS ONLY)

THAT IS OK ~~~

ENJOY IT


---------------------------------
xincheng24@hotmail.com
infosys

使用道具 举报

回复
论坛徽章:
1
2009日食纪念
日期:2009-07-22 09:30:00
7#
发表于 2006-9-12 15:09 | 只看该作者
可以直接使用delete from (select * from T1 where ... fetch first 3 rows only) where 1=1
不过该语法只要DB2 V8.2以上有效

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表