oracle order by 分页的问题

公司最近出现一个比较奇怪的问题,选择器在选择的时候,前面的几页基本是重复的.

本地开发完美没有任何问题。测试环境却怎么也不行。最后排查只有数据库不一致.服务器用的oralce.
打印出相关语句,如下类似:

select temp2.* from(

select rownum num,temp1.* from(

select u.contact,count(u.contact) as cnt from users u

where ….

  ordery by cnt desc

) temp1 where rownum<=n1

)temp2   where temp2.num>n2

查看之后发现问题所在.

首先根据cnt排序,cnt 相同的数据有很多个,对于cnt相同的数据,并没有给它一个排序规则,所以就根据数据库的取出的先后顺序来给它排序了

因此就出现了上面的情况

解决方法:将order by cnt,改成 order by cnt desc,u.contact desc,就可以了

如下:

select temp2.* from(

select rownum num,temp1.* from(

select u.contact,count(u.contact) as cnt from users u

where ….

ordery by cnt desc,u.contact desc

) temp1 where rownum<=n1

)temp2   where temp2.num>n2

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注