由于数据过多,经常使用分页的方法减少数据,相同的数据,相同的SQL,相同的系统,只是排序字段不同,会导致分页数据错误?
不可能?确实不可能,我也是这么想想的!!
同一个程序,同一张表,同样的SQL,只有排序字段不同,就导致了分页数据不同是正常的,但分页数据错误,可能吗?
而且最奇怪的是,第一页数据是正确的,第二页,第三页,第四页数据完全相同,第五页数据又是正确的!!!什么原因!!!
程序问题,但其他的表也是用的是同样的方法,是正确的。没有出现第二页,第三页,第四页数据完全相同的情况!!不是程序问题!!
SQL错误,其他的表也是相同的方法,是正确的,不是SQL的问题!!!
把SQL排序字段修改为主键后,没有出现第二页,第三页,第四页数据完全相同的情况!好像也不是SQL 的问题。
基本的SQL如下:
select fidfinreim40_0_,fsigndate40_0_ from ( select row_.*, rownum rownum_ from ( SELECT this_.fidfinreim as fidfinreim40_0_, this_.freferdate as freferdate40_0_ FROM EAS.V_QFinreim this_ WHERE 1=1 ORDER BY this_.freferdate desc ) row_ where rownum <=:p0 ) where rownum_ >:p1;
fidfinreim是主键,freferdate是一个日期类型的字段。
第二页参数, p0 = 30 :p1 = 15
第三页参数, p0 = 45:p1 = 30
第四页参数, p0 = 60:p1 = 45
第五页参数, p0 = 75:p1 = 60
只需要把ORDER BY 后边的freferdate这个改为fidfinreim就是正确的,但使用freferdate就是错误的!!!而且第一页数据是对的,第二页,第三页,第四页数据完全相同,
第五页数据又是对的,什么原因?
看来问题是因为排序字段,但和排序字段有什么关系呢?从来没听过因为排序字段导致这种数据错误的!!!
只能相关的数据查出来:
发现问题没?中间的数据freferdate完全相同,这个原因导致的!!!看来是排序不稳定,oracle数据库的问题!!!
oracle数据库的使用的不稳定的排序算法!!之前看数据结构是知道排序算法有一个稳定性的问题,但一直没想到有什么实际的影响,看来这个真是一个活生生的例子。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/6692.html