由于我使用的是DB2,为了在中间选择数据库的一部分(如限制/偏移配对),我需要做一个不同类型的prepare语句。我得到的例子是:
SELECT * FROM(SELECT col1,col2,col3,ROW_NUMBER()OVER()AS RN FROM table)AS cols RN在1和10000之间的区域;
我适应了这个:
SELECT * FROM(SELECT ROW_NUMBER()OVER(ORDER BY 2,3,4,6,7 ASC)AS rownum FROM TRANSACTIONS)AS foo WHERE rownum> = 500 AND rownum< 1000
当我调用fetchall_arrayref()时,我确实想出500个结果,但它只返回一个引用行号的数组,而不是我想要的所有数据。我知道这是一个事实,这就是代码被写作所支持的内容,我已经尝试了一堆排列来获得我想要的结果而没有运气。
我想要的就是把我之前的prepare语句中的所有列都集成到一个数组数组中: SELECT * FROM TU_TRANSACTIONS ORDER BY 2,3,4,6,7
但仅限于指定的部分。我缺少一个基本的东西,我只是看不到它。
任何帮助都会受到赞赏,即使它与一些建设性的批评相结合。
答案 0 :(得分:1)
你的表格表达式:
(SELECT ROW_NUMBER()OVER(订购2,3,4,6,7 ASC)作为rownum FROM TRANSACTIONS)as foo
只有一列 - rownum - 所以当你从“foo”中选择“*”时,你只得到一列。
您的表格表达式需要包含您想要的所有列,就像您发布的示例一样。
答案 1 :(得分:0)
我不使用DB2,所以我可能会离开基础,但似乎:
SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY 2,3,4,6,7 ASC) AS rownum FROM TRANSACTIONS) AS foo WHERE rownum >= 500 AND rownum <1000
只会返回行号,因为子查询引用表时主查询不会。它似乎只会看到一组数字(这将返回一个数字填写的单列)
也许这会奏效:
SELECT * FROM TRANSACTIONS, (SELECT ROW_NUMBER() OVER (ORDER BY 2,3,4,6,7 ASC) AS rownum FROM TRANSACTIONS) AS foo WHERE rownum >= 500 AND rownum <1000