如何解决偏移和获取下一条记录在多页中发生
最近我在sql Server中使用offset和fetch进行分页时遇到了一个问题,某些记录出现在多页中。
SELECT A.ID,A.Col1,A.Col2,A.Status
FROM (
SELECT ID,Col1,Col2,Status
FROM Table1
ORDER BY Status
OFFSET 100 ROWS FETCH NEXT 100 ROWS ONLY --# 100 just for sample,first page will be 0 and 100
) AS A
ORDER BY A.Status
ID是主键,它出现在不同的页面中,许多记录具有相同的状态,但是根据我的理解,数据库中的顺序应该相同。现在我可以使用ROW_NUMBER
了。
但是仍然想知道OFFSET
和FETCH NEXT
的任何问题,以及如何解决此问题?
解决方法
如果有多个具有相同状态的记录,则order by status
不是稳定子句;有关系时,数据库必须决定先记录哪条记录,并且在同一查询的连续执行中可能不一致。
要获得稳定的结果集,您需要order by
列,其组合代表唯一的键。这里,一个简单的解决方案是将主键添加到子句中:
所以:
SELECT ID,Col1,Col2,Status
FROM Table1
ORDER BY Status,ID
OFFSET 100 ROWS FETCH NEXT 100 ROWS ONLY
请注意,您不需要子查询:您可以在同一范围内进行选择,排序和提取。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。