在DB2中获取行

在DB2中获取行,db2,fetch,Db2,Fetch,我知道在DB2中(使用9.7版),我可以使用以下查询选择表的前10行: SELECT * FROM myTable ORDER BY id FETCH FIRST 10 ROWS ONLY 但是,例如,如何获得第11到20行? 我无法使用主键或ID来帮助我 提前谢谢 下面是一个示例查询,它将从包含州名称、缩写等的表中获取行 SELECT * FROM ( SELECT stabr, stname, ROW_NUMBER() OVER(ORDER BY stname) AS rownum

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

SELECT * 
FROM myTable
ORDER BY id
FETCH FIRST 10 ROWS ONLY
但是,例如,如何获得第11到20行? 我无法使用主键或ID来帮助我


提前谢谢

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

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
编辑:
orderby
是保证行编号一致所必需的 在查询的执行之间


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

db2set DB2_COMPATIBILITY_VECTOR=MYS
db2stop
db2start
  • IBM的DB2专家撰写的一篇优秀文章
  • 信息中心中的兼容性向量
  • 关于这个的博客

如果没有明确的顺序,则无法保证每次都会获取相同的10行。您需要在查询中添加
orderby
。您是对的。我刚刚更新了我的查询。谢谢你指出这一点!是的,它成功了。谢谢每当我在末尾添加where子句时,我都会得到
SQL错误[42703]:ROWNUMBER在使用它的上下文中无效。SQLCODE=-206,SQLSTATE=42703,DRIVER=4.19.26
@GabrielZiegler-听起来您的查询中有语法错误。确保在parents()中包含整个FROM子句,并使用“AS xxx”部分来定义临时表。