sql server排序后分页的出现一条丢失一条重复情况

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xx_star1204/article/details/79008938

在sqlsever中实现分页常用的是使用以下语句

select top 10 *  from [PRD_KPI].[dbo].[student]  
where id not in (  
  select top 0  id  from [PRD_KPI].[dbo].[student]    order by grade   desc
)  
 order by grade   desc

这个是选取前十条,如果是11~20条的改成如下即可

select top 10 *  from [PRD_KPI].[dbo].[student]  
where id not in (  
  select top 10  id  from [PRD_KPI].[dbo].[student]    order by grade   desc
)  
 order by grade   desc

然而这样做会出现以下bug

分数一样的几个数据,可能会出现多次排序而结果不一致的情况,这样如果相同分数在边界的时候,比如 当"李白","尔康","杜甫"三个人分数一样并且排在9到11,以10行为一页时可能会出现其中一个出现两次,而另外一个却没显示的bug。

而在hibernate中使用setFirstResult,setMaxResults对sqlserver数据库进行分页时使用的就是以上分页的实现。导致这个bug找了半天。

解决方法一次全部读完,再用subList分割



 

猜你喜欢

转载自blog.csdn.net/xx_star1204/article/details/79008938