带有offset和fetch的SQL查询

问题描述 投票:0回答:2

我正在创建一个基本的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,则查询将返回特定数量的行。

预期的结果是:

Expected result

我做错了什么还是有更好的方法。请帮我解决一下这个。谢谢。

c# mysql sql asp.net pagination
2个回答
2
投票

OFFSET用于省略特定数量的行,FETCH NEXT用于获取在偏移之后的一定数量的行,这里的顺序是保留行的顺序,以便您准确地得到您期望获得的行,因此如果你的查询没有给出输出,那么它意味着你在偏移73行之后没有行,在你的情况下,查询只给出7行,因此你没有得到输出。


0
投票

只有7行满足这个条件

b.StatusId = 2 and bc.CategoryId = 2 and b.IsDeleted = 0

如果要跳过73行结果并仍然获得一些行,则必须向数据库添加更多数据。

© www.soinside.com 2019 - 2024. All rights reserved.