mysql - 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
,这会导致不同的排序结果。我的假设是正确的还是我在其他地方的错误?如果这是正确的,那么有什么办法可以解决这种情况吗?
解决方案
首先ORDER BY
执行。通常,所有数据都已排序,尽管使用索引可能会更有效。
FETCH
然后获取OFFSET
-- 之后的行,它是从零开始的,而不是从一开始的。因此,第一行的 anOFFSET
为 0,因此第 50 行的偏移量为 49。
如果ORDER BY
在键值中有联系,那么这些可以以任意顺序出现。SQL 没有内置的结果集或表排序。所以关系可以以任何顺序出现。解决方案是包含一个唯一值(例如主键)作为最终键。
推荐阅读
- reactjs - 如何将本地 URL 从实时数据库发送到 Firebase 存储?
- php - SQL 查询没有带来预期的结果
- java - 2类UML图之间的关联和依赖
- azure-machine-learning-studio - 如何在 Azure 机器学习工作室中“非规范化”数据
- html - 溢出:自动元素无法在垂直居中的元素中正确滚动
- apache - Apache Reverse Proxy - 基于 HTTP 主体的 ProxyPass
- css - 使用 nth-child 或 nth-of-type 我想选择这种模式 -1,5,9,13,17,19..-
- sql - T-SQL。实施“任何” where 语句的最佳方法是什么
- hyperledger-fabric - Hyperleder Fabric 中是否存在用户/所有者概念
- bash - Bash 对我的 JSON CLI 参数的解释与本地不同,并且忽略了除一个以外的所有键