0

Java-oracle プログラミングで 2 つのテーブルを結合するように、2 つの ResultSet を結合することは可能ですか? 2 つの異なる Oracle データベース (データベースは物理的に異なる場所にあります) を照会する Java プログラムを作成しています。プログラムでは、sql1 は ResultSet ret1 を返し、sql2 は ResultSet ret2 を返します。ret1 に次のデータがあるとします。

Id   item
------------
1   item1
2   item 2
3   item 3
.........

Ret2には次のデータがあります

Id  info
---------
1  info1
2  info2
…

このような結果が必要です

Id item info
----------------------
1   item1 info1
2   item2  info2

Javaで次のようなことができますか:

Select ret1.id,ret1.item,ret2,info from ret1, ret2 where ret1.id=ret2.id

ret1 からループして ID を取得し、ret2 から情報を取得できることはわかっています。ループせずに 2 つのテーブルを結合して 2 つの ResultSet を結合するような高速な方法があるかどうか疑問に思っています。実際、これら 2 つの結果にはどちらも 50 万行あります。ありがとうございました!

4

6 に答える 6

1

次のようなことを試すことができます:

 SELECT ret1.id,ret1.item,ret2.info
FROM ret1
RIGHT JOIN ret2 
ON ret1.id=ret2.id;

Sql フィドルの例

編集:

2 つの ResultSet が同じデータベースからのものである場合は、取得中にユニオンを使用してそれらを結合しないでください。例えば

select A, B
from C
union
select A, B
from D
于 2012-09-19T18:43:02.073 に答える
0

要件に応じてDBリンクを使用する必要があります。

または、マテリアライズド・ビューを使用してみることができます。

于 2012-09-21T03:15:56.947 に答える
0

最もクリーンで効果的な解決策は、あるデータベースから別のデータベースへの dblink を作成し、クエリで結合を行うことです。それ以外の場合は、両方の結果セットをループする必要があります。

于 2012-09-19T19:03:04.337 に答える
0

意図した出力は、何らかのタイプの Bean または他の Java データ構造ですか? それがあり、 commons dbutils
を 使用してjavabeanを埋めていると仮定します。BeanListHandler を使用してタイプ ret1 の Bean のリストを作成し、ret2で BeanMapHandler を使用して、 ret2からの ID としてマップ キーを持つ Bean のマップを取得します。 次に、ret1 をループしていると、ret1 の ID で ret2 の値にアクセスできます。 それが理にかなっていることを願っています。


于 2012-09-19T19:10:08.013 に答える
0

パーミッションの問題により、dblink は作成できません。私は最終的に別の解決策を見つけます。これが私がやっていることです: 私は結果セット ret1 を取得し、次に使用します:

while (ret1.next()) { 
  get id from ret1, 
  query  info from another database;
  bla,bla,...
}
....

パフォーマンスは、2 つの結果セットを取得してから別の結果セットをループするよりもはるかに優れています...

于 2012-09-21T20:46:41.810 に答える
0

あなたができる最善の方法は、結果セットret1ret2Java の両方をループしid、両方を比較してから、結果を次のような多次元配列に格納することです-

  while (ret1.next()) {
        int id1 = rs.getInt("ID"); 
        while (ret2.next()){
               int id2 = rs.getInt("ID");
               if ( id1 == id2 )
               ...  
               ...
        }
  }

他の人が言うように、より良いアプローチは を使用することdblinksです。そして、トム・カイトが言うように-

書くコードが少なければ少ないほど、作成されるバグは少なくなる 書く
コードが増えるほど、作成されるバグ が増える

于 2012-09-19T19:00:06.490 に答える