2011-09-27 33 views
3

我有没有在我的DB2数据库运行下面的SQL语句:为什么FETCH FIRST N ROWS不能与WITH语句结合使用?

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

没有FETCH声明它的工作原理。该错误消息我得到的是:

非法使用关键字OPTIMIZE,令牌ERR_STMT 的WNG_STMT获得SQL SAVEPOINT举行自由 ASSOCIATE预期。

有什么建议吗?

+0

感谢您的答案。我忘了复制'ONLY'关键字。如果我添加它,查询仍然无效!相同的错误消息。 – Boris

回答

6

你错过了在FETCH子句的末尾ONLY关键字。

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

是的,这就是问题所在 –

+0

我只是忘了复制'ONLY'这里。我在原来的声明中使用它,并且查询不起作用。我有这种感觉,它连接到'WITH'子句。 – Boris

0

在最后缺少唯一关键字。示例​​。

0

尽管您给出的示例可能已经简化,但如何将提取第一个子句放入第一个选择部分?

我永远无法清楚地阅读文档,但随着with-statement创建一个通用表表达式,您可能无法使用fetch-first-clause从其中进行选择。根据this documentation,在选择with语句中使用fetch-first-clause是有效的语法。

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