9

私は次の表を持っています:

myTable:
+----+----------+
| id | parentID |
+----+----------+
|  1 |     null |
|  2 |        1 |
|  3 |        1 |
|  4 |        2 |
|  5 |        4 |
-----------------

parentIDがなくなるまで、すべての行をトレースバックしたいと思います。したがって、「.... WHERE id = 5」は私に次のようになります:

5, 4, 2, 1
4

1 に答える 1

9

隣接リストモデルを使用して階層データを整理しています。このような再帰的な操作が難しいという事実は、実際、このモデルの1つの大きな欠点です。

SQL Server 2005、Postgres 8.4、Oracle 11gなどの一部のDBMSは、キーワードを含む一般的なテーブル式を使用した再帰クエリをサポートしています。WITH

MySQLに関しては、再帰操作をより簡単にする(可能性のある)代替モデル(入れ子集合モデル)について説明している次の記事を確認することをお勧めします。

さらに、上記のコメントで指摘されたビル・カーウィンのプレゼンテーションもチェックすることをお勧めします。説明されているクロージャテーブルモデルは、ネストされたセットの非常に有効な代替手段です。

于 2010-07-18T18:55:17.837 に答える