2016-12-01 9 views
0

2つの表からすべてのデータを取得し、問合せを結合してページングして、常に10行が存在するようにしたいとします。私の最初の問題は、ページ番号が1の場合にのみ、結合なしで動作することです。私の2番目の問題(おそらく最初の問題を解決すれば解決されます)は、ページ番号が1の場合、ジョインがあれば機能しないということです。これは私のクエリです:Oracle SQLでのパラメータと結合

SELECT * FROM 
(
    SELECT INNER_TABLE.*, ROWNUM r 
    FROM (
     SELECT details.*, extras.* FROM d_table details, e_table extras 
     WHERE SYSDATE - details.UPDATE_DATE < 60 
     ORDER BY details.UPDATE_DATE DESC 
    ) INNER_TABLE 
    WHERE ROWNUM < (:pageNum * :PerPage + 1) 
) 
WHERE r >= (((:pageNum - 1) * :perPage) +1); 

これはページ1での結合なしで動作します。なぜこのように動作するのか分かりません。 誰かが私の問題に関して光を分かち合うことができる、またはなぜ私がばかげているのか、答えてください。 ありがとうございます。

EDIT:1以外のページ番号は空の結果を返します。 1つはそれがべきであるものを返す。
EDITEDIT:上記は、照会が結合なしで実行された場合にのみ当てはまります。結合で、私はエラーを取得します: "列があいまいに定義されています"。

+0

「参加があれば動作しません」とはどういう意味ですか?あなたはエラーが発生しますか?空の結果ですか? –

+0

申し訳ありません。編集済み.. –

+0

実際に使用したクエリを投稿したことはありますか? 'ORDER BY details.UPDATE_DATE <60'はOracleの正当な構文ではありません... –

答えて

0

私のクエリの問題は、 "INNER_TABLE。*"を使用して "詳細。、extras。"を取得できないことです。私の推測では、INNER_TABLEが何を意味するのかを認識できないということです。したがって、ソリューションでは、クエリのどこでも '*'の代わりにすべてのフィールド名を使用しています。