【问题标题】:Why does FETCH FIRST N ROWS not work in combination with WITH statement?为什么 FETCH FIRST N ROWS 不能与 WITH 语句结合使用?
【发布时间】:2011-09-27 15:34:40
【问题描述】:

以下 SQL 语句不在我的 DB2 数据库上运行:

WITH a AS (
    SELECT * FROM sysibm.systables
)
SELECT a.* FROM a
FETCH FIRST 10 ROWS

如果没有 FETCH 语句,它就可以工作。我得到的错误信息是:

非法使用关键字OPTIMIZE,token ERR_STMT WNG_STMT GET SQL SAVEPOINT HOLD FREE 应为 ASSOCIATE。

有什么建议吗?

【问题讨论】:

  • 感谢您的回答。我只是忘了复制ONLY 关键字。如果我添加它,查询仍然不起作用!同样的错误信息。

标签: sql db2 fetch db2-zos


【解决方案1】:

您在 FETCH 子句末尾缺少 ONLY 关键字。

WITH a AS (
    SELECT * FROM sysibm.systables
)
SELECT a.* FROM a
FETCH FIRST 10 ROWS ONLY;

【讨论】:

  • 我只是忘了在这里复制ONLY。我在原始语句中使用它并且查询不起作用。我感觉它与WITH 子句有关。
【解决方案2】:

最后缺少唯一的关键字。示例here

【讨论】:

    【解决方案3】:

    虽然您给出的示例可能已经简化,但将 fetch first 子句放在第一个选择部分怎么样?

    我永远无法清楚地阅读文档,但由于 with 语句创建了一个公共表表达式,您可能无法使用 fetch-first-clause 从中进行选择。根据this documentation,在 with 语句的 select 中包含 fetch-first-clause 是有效的语法。

    WITH a AS (
    SELECT * FROM sysibm.systables
    FETCH FIRST 10 ROWS ONLY
    )
    SELECT a.* FROM a;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 2015-12-25
      • 2021-12-29
      相关资源
      最近更新 更多