我正在创建一个基本的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,则查询将返回一定数量的行。
预期结果是:
我做错了什么吗,还是有更好的方法呢?请帮我解决一下这个。谢谢。
答案 0 :(得分:2)
OFFSET用于省略特定数量的行,而FETCH NEXT用于获取一定数量的行,这些行在偏移之后就到了,这里的order by保留了行的顺序,以便您准确地得到期望的结果得到,因此如果您的查询未提供输出,则意味着在偏移73行之后没有行要获取,在您的情况下,查询仅提供7行,因此您没有得到输出。
答案 1 :(得分:0)
只有7行满足此条件
b.StatusId = 2 and bc.CategoryId = 2 and b.IsDeleted = 0
如果您要跳过73行结果并仍然获得一些行,则必须向数据库中添加更多数据。