0

私はDB2を使用しているので、データベースの一部を途中で選択するために(制限/オフセットのペアリングなど)、別の種類の準備ステートメントを実行する必要があります。私が与えられた例はこれでした:

SELECT * FROM(SELECT col1、col2、col3、ROW_NUMBER()OVER()AS RN FROM table)AS cols WHERE RN BETWEEN 1 AND 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

しかし、指定されたセクションだけです。私が見逃している根本的なものがあり、それを見ることができません。

建設的な批判と相まって、どんな助けでもありがたいです。

4

2 に答える 2

1

テーブル式:

(SELECT ROW_NUMBER() OVER (ORDER BY 2,3,4,6,7 ASC) AS rownum FROM TRANSACTIONS) as foo

1 つの列 (rownum) しかないため、「foo」から「*」を選択すると、1 つの列のみが取得されます。

投稿した例と同じように、テーブル式には必要なすべての列を含める必要があります。

于 2010-08-06T00:13:58.367 に答える
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
于 2010-08-05T21:26:10.273 に答える