数据库选取第N到第N+M条记录[2004年7月10日 20:03]

原来没有遇上,倒是没认真考虑过这个问题。Sql Server适用

Record1
Record2
...
...
RecordN
...
...
RecordN+M
...
...

Result1:select top N+M from tableName order by Field1;/*Field1的顺序是表的顺序*/

Record1
Record2
...
...
RecordN
...
...
RecordN+M

Result2:select top M from Result1 order by Field1 desc;

RecordN+M
RecordN+M-1
...
...
RecordN

Result3:select * from Result2 order by Field2;

最后的语句是:select * from (select top M from (select top N+M from tableName order by Field1) order by Field1 desc) order by Field1;

2004-7-30补(下面Oracle 中适用):

这样做有一个问题,如果M是一个已经order by的语句,外层的order by 也有可能会破坏内层的order by ,所以需要加一层约束,Field1必须是内层order by 的第一个字段,经过简单测试,这是可以的,测试案例在后面。

另外一种获取N到N+M条记录的方法是:

SQL> select * from (select rownum as xfdgdf,tableName.* from tableName OriTable) where xfdgdf between N and N+M;

上面比正常需要的多出了一个字段xfdgdf,却是如何去掉呢??

SQL> select custid,custname from customer;

    CUSTID CUSTNAME
---------- --------------------
        35 444
        35 6666
       445 676
        35 aaa
        35 5555

SQL> select custid,custname from customer order by custid,custname;

    CUSTID CUSTNAME
---------- --------------------
        35 444
        35 5555
        35 6666
        35 aaa
       445 676

SQL> select * from (select * from (select custid,custname from customer order by
 custid,custname) order by custid desc) order by custid;

    CUSTID CUSTNAME
---------- --------------------
        35 444
        35 5555
        35 6666
        35 aaa
       445 676

7月31日补:

注:select * from tablename where rownum>10并不能如愿取出rownum在rownum后面的纪录

再到今天又发现另外一个的方法,不过没有测试,不知道效率比上面的方法效率有没有高一点,另外也没有解决多一个字段的问题。来自

http://blog.codelphi.com/progame/archive/2004/02/21/1456.aspx

Select rownum,* from MyTable where rownum<10
 minus
Select rownum,* from MyTable where rownum<5

这个方法比上面那个方法应该比较通用,在SQL server里也许能用类似的方法实现

Select top 10 * from MyTable 
 minus
Select top 5 * from MyTable

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值