您当前的位置: 首页 >  oracle

qq_34412985

暂无认证

  • 0浏览

    0关注

    1061博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Oracle分页:rownum从1开始查询没有问题,下一页出现问题

qq_34412985 发布时间:2020-07-27 22:10:58 ,浏览量:0

如题:Oracle分页查询在rownum从1开始可以查出数据,但是从其他数字开始就不能查出数据。

如图:rownum从1到10:

但是rownum 从11到20就不能查出数据(实际数据大于11):

原因分析:

    rownum总是从1开始的,第一条不满足去掉的话,第二条的rownum 又成了1。依此类推,所以永远没有满足条件的记录。

 可以这样理解:rownum是一个序列,是Oracle数据库从数据文件或缓冲区中读取数据的顺序。 它取得第一条记录则rownum值为1,第二条为2。依次类推。

    当使用“>、>=、=、between...and”这些条件时,从缓冲区或数据文件中得到的第一条记录的rownum为1,不符合sql语句的条件,会被删除,接着取下条。下条的rownum还会是1,又被删除,依次类推,便没有了数据。

修正方案:

    嵌套外层查询:

    select * from (     select rownum as rn,t.* from com_user t     )where 1=1 and rn between 11 and 20

效果如下:

备注:上面的查询方法比较容易写,但是效率稍微差一点,效率高的查询方法是:

上限条件必须放在子查询,而下限条件必须放在外层查询。

    select *       from (select rownum as rn, t.* from com_user t where rownum = 11

最终一样的效果。

关注
打赏
1653291990
查看更多评论
立即登录/注册

微信扫码登录

0.0461s