带偏移量和提取的SQL查询

时间:2018-11-04 08:41:08

标签: c# mysql sql asp.net pagination

我正在创建一个基本的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

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

2 个答案:

答案 0 :(得分:2)

OFFSET用于省略特定数量的行,而FETCH NEXT用于获取一定数量的行,这些行在偏移之后就到了,这里的order by保留了行的顺序,以便您准确地得到期望的结果得到,因此如果您的查询未提供输出,则意味着在偏移73行之后没有行要获取,在您的情况下,查询仅提供7行,因此您没有得到输出。

答案 1 :(得分:0)

只有7行满足此条件

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

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