2017-03-27 14 views
0

こんにちは私は、javaアプリケーションからSQL quiresを呼び出しています。今私は、1000の記録ORACLE - 異なる複数のCOLUMNSを持つROWNUMを選択

SELECT t1.col1,t1.col2,t2.col1,t2.col2 FROM(SELECT rownum AS rn, 
t1.col1, 
t1.col2, 
t2.col1, 
t2.col2 FROM table1 t1, 
table2 t2 WHERE t1.id=t2.id) WHERE rn BETWEEN ? AND ?; 

で1000年を呼び出すことですが、私は

SELECT t1.col1,t1.col2,t2.col1,t2.col2 FROM(SELECT rownum AS rn, 
distinct t1.col1, 
t1.col2, 
t2.col1, 
t2.col2 FROM table1 t1, 
table2 t2 WHERE t1.id=t2.id) WHERE rn BETWEEN ? AND ?; 

以下のように異なる値を持っている。しかし、このクエリは別々のためのRN AS ROWNUMを追加することができない、エラーを与えている1つの以上のクエリを持っています。上記のユースケースを解決するお手伝いをしてください。 DISTINCTキーワードのみ直接SELECTキーワードの後ろ又はCOUNT関数の内部許可さオラクルデータベースにおいて

+0

は、サブクエリで 'distinct'を行います。 –

答えて

1

oracleデータベースでは、レコードの順序が明示的なORDER BY句なしで保証されないため、SQLで矛盾した結果が発生します。

内部セレクトからtablaエイリアスにアクセスすることもできないため、異なるテーブルの列が同じ列名を持つ場合は、列エイリアスを適用する必要があります。

最善の解決策は、ネストされた選択の別の層を追加するために、次のようになります。

SELECT t1_col1, t1_col2, t2_col1, t2_col2 
    FROM (
    SELECT rownum AS rn, inner_tab.* 
     FROM (
     SELECT distinct t1.col1 AS t1_col1, 
         t1.col2 AS t1_col2, 
         t2.col1 AS t2_col1, 
         t2.col2 AS t2_col2 
     FROM table1 t1, 
       table2 t2 
     WHERE t1.id=t2.id 
     ORDER BY 1 -- you have to decide! 
    ) inner_tab 
    ) WHERE rn BETWEEN ? AND ?; 
関連する問題