ホームページ > データベース > mysql チュートリアル > CONNECT BY PRIOR を使用せずに MySQL で階層データをクエリする方法は?

CONNECT BY PRIOR を使用せずに MySQL で階層データをクエリする方法は?

Patricia Arquette
リリース: 2025-01-06 13:09:42
オリジナル
949 人が閲覧しました

How to Query Hierarchical Data in MySQL Without CONNECT BY PRIOR?

「Connect By Prior」を使用しない MySQL の階層データのクエリ

明示的な「Connect By Prior」句がないにもかかわらず、MySQL に、再帰的な組み合わせを使用して階層データを取得することが可能です。

再帰的走査アルゴリズム

tb_Tree のような階層テーブルを再帰的に走査するには、次の手順に従います:

  1. ParentId が一致する行を選択します。希望のルート
  2. 選択した行の ID 値を収集します。
  3. 収集されたリスト内の ID ごとに手順 1 と 2 を繰り返します。

この再帰プロセスは、すべてのリーフ ノードが識別されます。

深さベースアプローチ

ツリーの最大の深さがわかっている場合は、テーブルを繰り返し結合して最も深いレベルに到達し、残りの 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート