7

私はテーブルを持っています:

+----+--------+----------+
| id | doc_id | next_req | 
+----+--------+----------+
|  1 |    1   |     4    | 
|  2 |    1   |     3    | 
|  3 |    1   |     0    | 
|  4 |    1   |     2    | 
+----+--------+----------+

id-自動incerement主キー。

nex_req-レコードの順序を表します。(next_req =レコードのID

次の順序でレコードを取得するSQLクエリを作成するにはどうすればよいですか?

+----+--------+----------+
| id | doc_id | next_req | 
+----+--------+----------+
|  1 |    1   |     4    | 
|  4 |    1   |     2    | 
|  2 |    1   |     3    | 
|  3 |    1   |     0    | 
+----+--------+----------+

説明:

record1 with id=1 and next_req=4 means: next must be record4 with id=4 and next_req=2
record4 with id=5 and next_req=2 means: next must be record2 with id=2 and next_req=3 
record2 with id=2 and next_req=3 means: next must be record3 with id=1 and next_req=0 
record3 with id=3 and next_req=0: means that this is a last record 

レコードの順序をテーブルに保存する必要があります。それは私にとって重要です。

4

3 に答える 3

0

Oracleでソリューションを提供できます。

select id,doc_id,next_req from table2 
start with id = 
(select id from table2 where rowid=(select min(rowid) from table2))
connect by prior next_req=id

fiddle_demo

于 2012-12-21T13:23:54.153 に答える
0

テーブルを変更して別の列 OrderNumber を追加することをお勧めします。これにより、最終的にはこの列で簡単に注文できるようになります。

このアプローチには問題があるかもしれませんが:

1) 既存のテーブルがあり、OrderNumber 列の値を設定する必要があります。この部分は簡単だと思います。初期ゼロ値を設定し、CURSOR を追加するだけで、たとえばレコードを移動して注文番号の値を増やすことができます。

2) テーブルに新しい行が表示されたら、OrderNumber を変更する必要がありますが、ここでは特定の状況によって異なります。リストの最後に項目を追加するだけでよい場合は、新しい値を MAX + 1 に設定できます。別の状況では、新しい項目を挿入するときに TRIGGER を記述し、ポイント 1 と同様の手順を呼び出してみてください)。これはパフォーマンスに非常に悪い影響を与える可能性があるため、アーキテクチャを注意深く調査し、この異常な構造を変更する必要があります。

于 2012-12-21T13:28:50.697 に答える