设为首页收藏本站

融智技术学院

 找回密码
 注册

QQ登录

只需一步,快速开始

Andriod编程宝典
搜索
查看: 432|回复: 0

【数据库每日一问】我要如何限制订货后由Oracle查询返回的行数?

[复制链接]
MrLi 发表于 2014-3-6 14:00:00 | 显示全部楼层 |阅读模式

问:
在Oracle查询有没有一种方法,像MySQL的限制条件?
在MySQL中,我可以这样做:
  1. select *
  2. from sometable
  3. order by name
  4. limit 20,10
复制代码



获得21到30行(跳过前20,显示接下来的10行)。顺序后这些汗被选定,所以它真正开始在第20个名称的字母。

在Oracle中,人们提到的唯一的就是ROWNUM伪列,但它在排序之前已经赋值了,这意味着这样的:
  1. select *
  2. from sometable
  3. where rownum <= 10
  4. order by name
复制代码


将返回一组随机的按名称排序十行,这通常不是我想要的。它也不允许用于指定一个偏移量。
答:
您可以使用子查询这个像
  1. select *
  2. from  
  3. ( select *
  4.   from emp
  5.   order by sal desc )
  6. where ROWNUM <= 5;
复制代码
也可以通过http://www.oracle.com/technetwor ... 6asktom-086197.html
在甲骨文/ AskTom获取更多信息。

更新:如果要限制的结果既有上界也有下界事情变得更加复杂了一点

  1. select * from
  2. ( select a.*, ROWNUM rnum from
  3.   ( <your_query_goes_here, with order by> ) a
  4.   where ROWNUM <= :MAX_ROW_TO_FETCH )
  5. where rnum  >= :MIN_ROW_TO_FETCH;
  6. (从指定AskTom-文章中复制)
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

新突破电商

小黑屋|手机版|Archiver|融智技术学院 ( 京ICP备09018999号  

GMT+8, 2018-1-19 05:55

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表