「Connect By Prior」を使用しない MySQL の階層データのクエリ
明示的な「Connect By Prior」句がないにもかかわらず、MySQL に、再帰的な組み合わせを使用して階層データを取得することが可能です。
再帰的走査アルゴリズム
tb_Tree のような階層テーブルを再帰的に走査するには、次の手順に従います:
この再帰プロセスは、すべてのリーフ ノードが識別されます。
深さベースアプローチ
ツリーの最大の深さがわかっている場合は、テーブルを繰り返し結合して最も深いレベルに到達し、残りの NULL 値をフィルターで除外できます。
ネストされたセット表現
あるいは、ネストされたセット表現を使用するようにテーブル構造を変更することもできます。これには、階層内の各ノードの左境界と右境界を表す列を追加することが含まれます。
子を取得するクエリの例
特定のノードのすべての子を取得するにはID が X の場合、次のクエリを使用します。
SELECT * FROM tb_Tree WHERE ParentId IN ( SELECT Id FROM tb_Tree WHERE ParentId = X UNION ALL /* Recursive traversal of children */ SELECT Id FROM tb_Tree WHERE Id IN ( SELECT Id FROM tb_Tree WHERE ParentId = X ) );
このクエリは階層を再帰的に横断します。子ノードに関連付けられたすべての ID 値を収集します。
以上がCONNECT BY PRIOR を使用せずに MySQL で階層データをクエリする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。