• oracle中使用rownum作为条件的失效问题的原因和解决方法


    在oracle中使用rownum作为条件查询数据时,出现数据查找不到的问题

    原因就是rownum是在数据进行一条一条语句的扫描出现的,所以只能使用“小于”,“小于等于符号”

    使用“等于”,"大于“符号都不行,因为这时候语句不是从第一条开始一条一条扫描的,故而无法对每条语句产生rownum,也就无法用rownum做条件了。

     

     解决方案:

     采用子查询解决

     比如上方的sql语句 

    select * from t_owners where rownum>2 and rownum<5

     改为:

    1. select * from (select rownum r,t. * from t_owners t where rownum <5)
    2. where r>2

    即可查询到数据,问题解决。(会先执行子查询中的语句,产生rownum)

    注意:需要给rownum起别名,在外层使用,要保证使用的rownum是子查询中已经产生的rownum。

    如果需求是排序后分页查询,可使用 RANK、DENSE_RANK 、ROW_NUMBER 这三个函数,这三个函数又有点区别。

    RANK:相同的值排名相同,排名跳跃

    DENSE_RANK :相同的值排名相同,排名连续

    ROW_NUMBER :返回连续的排名,无论值是否相等

    ROW_NUMBER进行举例:

    1. select * from (select row_number() over (order by money desc) rpwn,money from t_owners)
    2. where rpwn >2

  • 相关阅读:
    机器学习入门路线
    Python 操作MongoDB数据库
    PTA--1030 Travel Plan(最短路+记录路径)
    相机解析力调试总结
    《论文写作》感悟
    快速排序法
    “构建交互式用户界面的自定义组件应用与界面布局设置“
    leetcode 48. 旋转图像
    消息队列解决的问题
    攻防世界----easytornado笔记
  • 原文地址:https://blog.csdn.net/m0_45071651/article/details/125521877