2011-07-12 7 views
0

私は隣人の行を取得するためのクエリを書くいくつかの問題に出くわして、それについて何をすべきか分かりません。隣人の行を取得するためにSQLクエリを書く

これは(それが純粋に現時点でSQLを使用して実装ではなく、SQLおよびJava実装のミックスされていない)シナリオである:

千エンティティBを有するエンティティA、Bが有する各エンティティがあり1000エンティティC、各エンティティCには1000個のエンティティDがあります.Dに格納された情報を使用する必要があります。まず、エンティティD内のすべてのエンティティDを取得するクエリがあります。次に、 Dを次のDまたは前のDに戻しますが、このロジックはSQLクエリとして書き込まれません。

質問1

私はSQLクエリとしてナビゲーションロジックを実装する場合、どのように私は私の選択クエリに次のDに行くことができますか?元のクエリが単純であると仮定します。

select * from D 
    inner join C where C.ID = D.FK 
    inner join B where B.ID = C.FK 

OracleとSQL Serverの両方の汎用ソリューションを探しています。

質問2

どのように私は(上記のクエリの結果内)の位置は現在の行が何であるかを知っています。たとえば、 "This is No. X of Y"のようなロジックを実装したいとします。

隣人の行が混乱している人にとっては、上記のクエリから取得した各行の前または次の行を意味します。結果のクエリは上記のものとはかなり異なるかもしれませんが、あなたはアイデアを得て、エンティティA全体で特定のDの位置をJAVAを使用して指定することはできますが、SQLを使用してそれを行う方法はわかりません。

+2

私はあなたの質問を理解していません。 SQL文を使用してUIを作成しようとしているようですが、確かに私はあなたを誤解しています。 – Flimzy

+0

ええええええええええええええええええ? –

+0

@Jesus Ramos、あなたは正しいエンティティに別のエンティティが含まれています。我々は現在、エンティティDを取得するためにいくつかのループを使用し、Dを得るたびに何か他のことを行うようにデータベースを照会することは非常にコストがかかります。 – newguy

答えて

1

Oracleを使用している場合は、LEADキーワードとLAGキーワードを調べると、前または後の行の情報を選択できます。

+0

+1隣人の行がそれを与えてはならないことを意味していたことを驚いたが、ちょうど私を混乱させて読むこと –

+0

SQL ServerとOracleの両方に対する解決策がありますか? – newguy

+0

googleはあなたの友人です。 – EvilTeach

関連する問題