使用ROW_NUMBER() 排序后分页查询的坑

使用ROW_NUMBER() 排序后分页查询,当排序字段有重复记录时会导致分页查询结果出错:

SELECT * FTOM (SELECT ROW_NUMBER() OVER(ORDER BY T.KT_NUM DESC) pos,T.* FROM T_KT)) WHERE POS > 0 AND POS <= 10 --查询前10条

SELECT * FTOM (SELECT ROW_NUMBER() OVER(ORDER BY T.KT_NUM DESC) pos,T.* FROM T_KT)) WHERE POS > 10 AND POS <= 20 --查询11-20条

SELECT * FTOM (SELECT ROW_NUMBER() OVER(ORDER BY T.KT_NUM DESC) pos,T.* FROM T_KT)) --查询所有

如上例子:当KT_NUM字段有重复记录时会导致3次查询时候排序POS不统一,从而导致分页查询出结果有误

解决:使用ROW_NUMBER()排序后再分页查询时,需确保排序结果无争议性,如果排序结果有争议性,可在按需求排序后增加按唯一字段排序条件!

 

 

转载于:https://my.oschina.net/u/3915021/blog/2989981

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值