如何在 OpenEdge SQL 中模拟 SELECT ... LIMIT、OFFSET?

2023-12-06

在大多数 SQL 实现中,能够选择查询中返回的所有行的“滑动窗口”子集是很常见的事情。一个常见的用例是分页。例如,假设我有一个搜索页面,每页有 10 个结果。对于支持的实现LIMIT and OFFSET关键字,用于返回每个页面结果的查询如下:第一页将使用SELECT ... LIMIT 10 OFFSET 0,第 2 页将使用SELECT ... LIMIT 10 OFFSET 10,第 3 页将使用SELECT ... LIMIT 10 OFFSET 20等(请注意,OFFSET之前生效LIMIT).

不管怎样,我试图在 OpenEdge 的 SQL 引擎中模仿这个功能。我已经知道了SELECT TOP基本上相当于LIMIT,但是我找不到类似的东西OFFSET(我不认为有一个exact相等的)。 SQL Server 和 Oracle 也缺乏OFFSET,但他们有一个名为的伪列ROWCOUNT and ROWNUM,分别可用于模仿使用嵌套选择的行为(请参阅here and here).

In the 10.2B SQL 参考doc,p49 有一个小节标题为TOP 条款底部说

SELECT TOP与 Oracle 的功能相当ROWNUM功能。注意SELECT TOP简单地定义为 结果集大小的限制,优化器决定如何使用 此限制是为了实现最佳数据访问。因此,SELECT TOP没有全部 用于定义Oracle含义的“程序规则”ROWNUM短语。

然而,根据TOP的语法它不能用作谓词,例如ROWNUM可以(例如我不能说SELECT * FROM Customer WHERE TOP > 5 AND TOP < 10). So TOP is not功能上等同于ROWNUM.

有没有什么办法可以模仿OFFSET,还是我运气不好?


OpenEdge 11.2 添加了对OFFSET and FETCH clauses to SQL SELECT查询; 11.2 以下的 OpenEdge 版本不支持OFFSET/FETCH.

来自11.2 产品文档《SQL参考》文档:

The OFFSET clause specifies the number of rows to skip, before starting to return rows
from the query expression. The FETCH clause specifies the number of rows to return,
after processing the OFFSET clause.

值得注意的是,TOP and OFFSET/FETCH条款是互斥的 - TOP不能在使用以下内容的查询中使用OFFSET or FETCH.

文档中的示例查询:

跳过前 10 行并返回其余符合条件的行:

SELECT OrderID,OrderDate,custID,filler
FROM dbo.Orders OFFSET 10;

返回前 10 行而不跳过任何行:

SELECT OrderID,OrderDate,custID,filler
FROM dbo.Orders
ORDER BY OrderDate DESC, OrderID DESC
FETCH FIRST 10 ROWS ONLY;

返回查询结果集中的第 51 行到第 60 行:

SELECT OrderID,OrderDate,custID,filler
FROM dbo.Orders
ORDER BY OrderDate DESC, OrderID DESC
OFFSET 50 ROWS FETCH NEXT 10 ROWS ONLY;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 OpenEdge SQL 中模拟 SELECT ... LIMIT、OFFSET? 的相关文章

随机推荐

  • 泛型和 Marshal/UnMarshal。我在这里缺少什么?

    最好提一下这一点 我正在使用 Delphi XE2 但 XE 或 2010 也应该可以解决问题 此问题现已位于质量中心QC 99313请投票 截至 2011 年 10 月 20 日 Embarcadero 已将 QC 报告标记为 已解决 S
  • 使用 DatePicker 选择多个日期

    我正在尝试创建一个选择多个日期的 DatePicker 我可以选择多个日期 但我想在选择它们时保持 DatePicker 打开 问题是 每次我选择日期时 DatePicker 都会关闭 我不想使用私有 API 我正在考虑添加这个 dateP
  • 为什么 HTML 认为“chucknorris”是一种颜色?

    为什么某些随机字符串在 HTML 中作为背景颜色输入时会产生颜色 例如 bgcolor chucknorris 产生一个红色背景 test 反过来 bgcolor chucknorr 产生一个黄色背景 test 这在各种浏览器和平台上都是如
  • 无法显示 AdMob 横幅、收到错误 HTTP 响应代码:400 等

    无论我做什么 我都无法显示来自 Admob 的横幅 我在两个不同的 Android 设备上进行了测试 以下是我得到的结果 第一个设备 I Ads 8161 Starting ad request I Ads 8161 Please set
  • 无法创建 deno docker 镜像

    我想创建deno使用 Dockerfile 生成 docker 镜像 FROM alpine latest WORKDIR RUN apk update apk upgrade RUN apk add curl RUN curl fsSL
  • 如何将 std::variant 的元素复制到另一个变体类型的变量

    这是后续这个答案 假设我们有两种类型std variant具有部分相同的成员类型 例如如果我们有 struct Monday struct Tuesday etc using WeekDay std variant
  • Snakemake - 下载数据的规则

    我在实现管道时遇到一些麻烦 其中第一步是从某个服务器下载数据 据我了解 所有规则都必须有文件输入 然而 在我的例子中 输入 是提供给访问服务器并下载数据的脚本的 ID 字符串 我知道远程文件Snakemake 中的选项 但我正在下载的服务器
  • 在同一场景上加载多个视频时 Unity 应用程序冻结

    从菜单导航到包含 8 个 1 分钟 MP4 视频的场景时 这些视频在 RawImage 组件上使用新的 VideoPlayer 脚本进行播放 我使用的是Unity 5 6 0b11测试版 在我尝试导航的场景中 预制件会在列表缩略图中加载视频
  • 保护 NodeJS 的 post 路由

    我正在开发一个 NodeJS 应用程序 到目前为止 我了解到您可以使用 JWT 保护路由 并且我已经实现了这一点 问题是 我不确定如何保护允许用户发帖的路由 我们以注册路由为例 该路由将用于用户注册 我希望用户能够发布此内容 但只能从我的应
  • Excel:使用 vba 添加评论作者

    当我手动向单元格添加注释 使用插入注释命令 时 文本前面会以粗体显示我的用户名 是否可以为创建的评论复制此特征vba using Range AddComment 对于运行宏的用户 您可以添加登录的用户名 用户名以粗体显示 如下所示 此示例
  • 如何让Flask跨两台不同的机器与Flask通信?

    我在一台机器上有一个 Flask 应用程序 在第二台机器上需要运行一些查询 第二台机器不渲染任何页面 它只是在第一个应用程序的幕后做一些事情 如果我在第二台计算机上创建 Flask 应用程序来控制这些查询 我如何从第一个应用程序与其进行通信
  • JS > FTP > 网页目录 > 文件列表

    是否可以使用 Javascript 调用对指定 URL 的 FTP 调用并检索此 Web 目录中的所有文件 假设您正在讨论浏览器中的 javascript 那么如果没有一些支持的服务器端代码 这是不可能的 您可以使用 javascript
  • 在 Windows 任务计划程序中更改已计划任务的运行时间

    我在修改机器上已存在的任务时遇到问题 我正在尝试使用 C 生成的互操作接口 从 system32 taskschd dll 生成的 Interop TaskScheduler dll 来执行此操作 首先 我无法使用其他库 例如http ta
  • Java try-finally返回设计问题

    在 Java 中 try finally 的执行对我来说有点不直观 正如另一个问题中所说明的 Java中finally总是执行吗 如果try块中有return语句 如果定义了finally块 它将被忽略 例如 函数 boolean test
  • Android:如何在应用程序中集成admob?

    我试图将 admob 横幅集成到我的应用程序中几个小时 但我做不到 所以我创建了新的应用程序 其唯一目的是显示 admob 横幅 但它也不起作用 这是代码 public class MainActivity extends Activity
  • 如何以编程方式从 Windows 手机访问 SMS 消息线程 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我想访问 Windows Phone 上的所有消息并备份它或在 PC 手机上复制它 我搜索了这个 但无法在互联网上找到它 有没有可用的 API 来实现这一点 这仅适用于 Wind
  • Breezejs 与保存包有关的问题

    我使用breezejs 我的应用程序的服务器端代码是 net 在我看来 客户端 我想添加实体 然后我想保存它 让我们假设一个实体是这样的 Id 1 Name someName CreatedDate 1900 01 01T05 00 00Z
  • TreeView 重新获得 Ctrl+Click 的焦点

    我有一个 WinForms TreeView 控件 我想用它来根据当前选择的节点打开另一个窗体 我想在按住 Ctrl 键并单击节点时打开另一个窗体 目前 如果我在 DoubleClick 处理程序中打开另一个表单 显然是双击该节点 它就会按
  • 应用速率大于 2 倍时,avplayer 播放时出现抖动

    我想调整 Avplayer 速率 我可以在以下帮助下完成 avplayer play avplayer setRate 1 5 还禁用了音轨 低于2 0时运行良好 但当我们应用它超过 2 倍时 就会导致视频不稳定或不稳定 当我用谷歌搜索这一
  • 如何在 OpenEdge SQL 中模拟 SELECT ... LIMIT、OFFSET?

    在大多数 SQL 实现中 能够选择查询中返回的所有行的 滑动窗口 子集是很常见的事情 一个常见的用例是分页 例如 假设我有一个搜索页面 每页有 10 个结果 对于支持的实现LIMIT and OFFSET关键字 用于返回每个页面结果的查询如