【问题标题】:Fetching rows in DB2在 DB2 中获取行
【发布时间】:2013-07-26 02:02:42
【问题描述】:

我知道在 DB2(使用 9.7 版)中,我可以使用以下查询选择表的前 10 行:

SELECT * 
FROM myTable
ORDER BY id
FETCH FIRST 10 ROWS ONLY

但是,例如,我怎样才能获得第 11 到 20 行? 我无法使用主键或 ID 来帮助我...

提前致谢!

【问题讨论】:

  • 如果没有明确的顺序,就无法保证您每次都会获取相同的 10 行。您需要将ORDER BY 添加到您的查询中。
  • 你是对的。我刚刚更新了我的查询。感谢您指出这一点!

标签: db2 fetch


【解决方案1】:

这是一个示例查询,它将从表中获取包含州名、缩写等的行。

SELECT *
FROM (
   SELECT stabr, stname, ROW_NUMBER() OVER(ORDER BY stname) AS rownumber
   FROM states
   WHERE stcnab = 'US'
) AS xxx
WHERE rownumber BETWEEN 11 AND 20 ORDER BY stname

编辑:ORDER BY 是保证行编号一致所必需的 在查询执行之间。

【讨论】:

  • 是的,它完成了这项工作。谢谢!
  • 每当我最后添加 where 子句时,我都会得到 SQL Error [42703]: ROWNUMBER IS NOT VALID IN THE CONTEXT WHERE IT IS USED. SQLCODE=-206, SQLSTATE=42703, DRIVER=4.19.26
  • @GabrielZiegler - 听起来您的查询中有语法错误。确保将整个 FROM 子句包含在父母 ( ) 中,并使用“AS xxx”部分来定义临时表。
【解决方案2】:

您还可以使用 MYSQL 兼容性。您只需要激活 MYS 的向量兼容性,然后在查询中使用 Limit 和 Offset。

db2set DB2_COMPATIBILITY_VECTOR=MYS
db2stop
db2start

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多