2017-07-03 1 views
1

までの階層テーブルを反復処理するために1つのSQLクエリを使用することが可能です私はこのようになりますテーブルを持っている:は、例えば、NULL

| ID (This is primary key) | parent (this refers to other rows in this table) | 
|--------------------------|--------------------------------------------------| 
| 1      | NULL            | 
| 2      | 3            | 
| 3      | 1            | 

は、それは私のすべての階層を返すONE mysqlのクエリを持つことが可能です両親がNULLに達するまで?

たとえば、私は行2の親を求める場合、私は行2を取得し、次に行3と行1を取得したい。そして、私は行3の親を求めたら、行3と行1を取得したい。

(ところで、私のテーブルにはNULLの親を持つ複数の行があります)。

これは可能ですか?はい、どうすればいいですか?

+0

いいえ、そのデータ表現ではありません。ストアドプロシージャまたは代替データ構造を使用すると、そうすることができます。 –

答えて

1

MySQL 8.0 recursive queriesまでこれを簡単に行うことはできません。

私はPercona Liveカンファレンスのために、2017年4月にこれを行う方法を示すRecursive Query Throwdown in MySQL 8.0プレゼンテーションを行いました。

また見ることができます:

+0

私はmysql 5.7を扱っているようです。その後、隣接関係リストを見てみましょう。ありがとう –

+0

ああ、あなたのスライドを見て、私はこのテーブルを使うつもりのブレッドクラムに適したPath Enumerationを見た。これを最善の答えとします。ありがとう。 –

0

単一のクエリから階層を取得することはできませんあなたのツリーを表現するために選択した構造体を使ってmysqlに入れます。あなたはoracleに切り替えることができます( "oracle connect by"の場合はgoogleを使用します)、データに別の構造(隣接リスト)を使用するか、不確定な数のクエリを実行します。