Oracle中分页查询语句

好好学习29 2014-09-18 04:50:47

select * from (select t.*,rownum from MBAA01_OW_OWNER t WHERE 1=1 )
where rownum > 0 AND rownum <= 5


select * from (select t.*,rownum from MBAA01_OW_OWNER t WHERE 1=1 )
where rownum > 5 AND rownum <= 10

上一个查询语句可以,下一个为什么不行
...全文
562 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
feiyingliu 2014-09-29
  • 打赏
  • 举报
回复
--
select * from (select rownum num,t.* from MBAA01_OW_OWNER  t WHERE 1=1 ) 
 where rownum > 0 AND rownum <= 5

--指定伪列别名
select * from (select rownum num,t.* from MBAA01_OW_OWNER  t WHERE 1=1 ) 
 where num > 5 AND num <= 10
sych888 2014-09-29
  • 打赏
  • 举报
回复
引用 楼主 tomeatbj163 的回复:

select * from (select t.*,rownum from MBAA01_OW_OWNER t WHERE 1=1 ) 
 where rownum > 0 AND rownum <= 5

select * from (select t.*,rownum from MBAA01_OW_OWNER t WHERE 1=1 ) 
 where rownum > 5 AND rownum <= 10
上一个查询语句可以,下一个为什么不行
你不制定具体的表名,ROWNUM是子查询的伪表做处理的 第一句的查询条件相当于 rownum <= 5 第二句的查询中的ROWNUM>5,数据库是无法计算出来的,针对当前表的伪列ROWNUM,数据库 只能计算出<=具体数字 或等价的 >0 and <= 若是想实现第二中情况,可以在子查询中具体指定ROWNUM伪列的别名
卖水果的net 2014-09-29
  • 打赏
  • 举报
回复
where rownum > 5 AND rownum <= 10 这里的 rownum 是外层的 rownum ,并非子查询的。子查询的,来个别名。
不写代码的钦 2014-09-19
  • 打赏
  • 举报
回复
rownum是针对本层查询的一个伪列,排序用的。只能从1开始,不能从2或者以上开始。
critical_hit 2014-09-18
  • 打赏
  • 举报
回复
还需要再嵌一层子查询吧
小灰狼W 2014-09-18
  • 打赏
  • 举报
回复
内层的rownum要起个别名 否则外层的取的还是自身的伪列,此时没有rownum=1的记录,自然不会有2 3 4 5....

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧