首页 > 解决方案 > ORDER BY 是先排序,然后是 Offsets 和 Fetches,还是仅对获取的列执行排序?

问题描述

ORDER BY (CASE @Lang WHEN 'fr' THEN [SUBS_NAME_F] ELSE [SUBS_NAME_E] END)
OFFSET (@PageNumber - 1) * @ItemsPerPage ROWS
FETCH NEXT @ItemsPerPage ROW ONLY

这是我认为造成我的问题的存储过程的一部分。

问题是当我在我的网站上运行查询时,我会根据值得到不同的结果顺序@ItemsPerPage,例如,在查看前几行时,值 50 和值 500 会产生不同的结果。

我认为发生这种情况是因为我要提取 50 行(或@ItemsPerPage数量)我需要的行,然后它们按 排序ORDER BY,这会导致不同的排序结果。我的假设是正确的还是我在其他地方的错误?如果这是正确的,那么有什么办法可以解决这种情况吗?

标签: mysqlsqlsql-order-byssms

解决方案


首先ORDER BY执行。通常,所有数据都已排序,尽管使用索引可能会更有效。

FETCH然后获取OFFSET-- 之后的行,它是从零开始的,而不是从一开始的。因此,第一行的 anOFFSET为 0,因此第 50 行的偏移量为 49。

如果ORDER BY在键值中有联系,那么这些可以以任意顺序出现。SQL 没有内置的结果集或表排序。所以关系可以以任何顺序出现。解决方案是包含一个唯一值(例如主键)作为最终键。


推荐阅读