带有offset和fetch的SQL查询
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有offset和fetch的SQL查询相关的知识,希望对你有一定的参考价值。
我正在创建一个基本的ASP.net博客主页。我有两张桌子(下面给出的结构)。我需要这些表中的数据进行分页,所以我在查询中使用了offset和skip。
表格是:
表 - 博客:
Id(primary),
Description,
Data,
CreatedById,
CreatedDate,
ImageUrl,
IsDeleted,
Tags,
StatusId(value = 1 for draft and 2 for publish)
表 - BlogCategories:
Id,
BlogId(foreign key to table 1),
CategoryId
我已经在这些表中有数据了。我使用以下查询来获取数据
Select *
from Blog b inner join
BlogCategories bc
on b.Id = bc.BlogId
where b.StatusId = 2 and bc.CategoryId = 2 and b.IsDeleted = 0
ORDER BY b.CreatedDate desc
OFFSET 73 ROWS
FETCH NEXT 9 ROWS ONLY;
此查询返回0行,但如果我从where子句中删除statusId和CategoryId,则查询将返回特定数量的行。
预期的结果是:
我做错了什么还是有更好的方法。请帮我解决一下这个。谢谢。
答案
OFFSET用于省略特定数量的行,FETCH NEXT用于获取在偏移之后的一定数量的行,这里的顺序是保留行的顺序,以便您准确地得到您期望获得的行,因此如果你的查询没有给出输出,那么它意味着你在偏移73行之后没有行,在你的情况下,查询只给出7行,因此你没有得到输出。
另一答案
只有7行满足这个条件
b.StatusId = 2 and bc.CategoryId = 2 and b.IsDeleted = 0
如果要跳过73行结果并仍然获得一些行,则必须向数据库添加更多数据。
以上是关于带有offset和fetch的SQL查询的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 2012使用Offset/Fetch Next实现分页
SQL2012分页offset fetch 比较SQL2005/2008的ROW_Number
SQL Server 2005相当于OFFSET / FETCH [重复]