ホームページ > データベース > mysql チュートリアル > SQL Server の再帰的自己結合はどのようにして階層データを効率的に取得できるのでしょうか?

SQL Server の再帰的自己結合はどのようにして階層データを効率的に取得できるのでしょうか?

Barbara Streisand
リリース: 2025-01-15 12:01:47
オリジナル
223 人が閲覧しました

How Can Recursive Self-Joins in SQL Server Efficiently Retrieve Hierarchical Data?

SQL Server での再帰的自己結合を使用した階層データの効率的な取得

階層データ構造のナビゲーションは複雑になる場合があります。 SQL Server の再帰共通テーブル式 (CTE) は、自己結合を使用してこれらのツリー状構造を横断するための強力なソリューションを提供します。

課題を理解する

カテゴリ テーブルなどの典型的な階層データ モデルを考えてみましょう。

<code class="language-sql">CREATE TABLE Categories (
  Id int PRIMARY KEY,
  Name nvarchar(MAX),
  ParentId int FOREIGN KEY REFERENCES Categories(Id)
);</code>
ログイン後にコピー

この設計により、任意の深さのネストされたカテゴリが可能になります。 この階層を視覚化すると (以下に示すように)、標準 SQL クエリで完全なリネージュを取得することの難しさが浮き彫りになります。

[カテゴリ階層の画像を挿入]

再帰的 CTE ソリューション

再帰的 CTE は、この問題をエレガントに解決します。次のクエリは、カテゴリとその祖先全体を取得する方法を示しています:

<code class="language-sql">WITH RecursiveCategoryCTE AS (
  SELECT
    c.Id,
    c.Name,
    CAST(c.Name AS nvarchar(MAX)) AS Path
  FROM Categories AS c
  WHERE
    c.ParentId IS NULL
  UNION ALL
  SELECT
    t.Id,
    t.Name,
    CAST(r.Path + ',' + t.Name AS nvarchar(MAX)) AS Path
  FROM RecursiveCategoryCTE AS r
  JOIN Categories AS t
    ON t.ParentId = r.Id
)
SELECT
  c.Id,
  c.Name,
  c.Path
FROM RecursiveCategoryCTE AS c
WHERE
  c.Name = 'Business Laptops';</code>
ログイン後にコピー

クエリの内訳

  • CTE RecursiveCategoryCTE は、ルート カテゴリ (ParentId は NULL) を選択することから始まります。
  • 再帰的に Categories テーブルに結合し、Path 列を構築して祖先名を蓄積します。
  • 最後の SELECT ステートメントは、ターゲット カテゴリ (「ビジネス ラップトップ」) とその生成された祖先パスをフィルターします。

結果は次のようになります:

Id Name Path
12 Business Laptops Computers,Laptops,Business Laptops

現実世界のアプリケーション

このテクニックは、次のような多くのアプリケーションで役立ちます。

  • 組織図
  • E コマース サイト ナビゲーション (ブレッドクラム トレイル)
  • 家系図データベース (家系図)

このアプローチは、SQL Server 内の階層データをナビゲートするための簡潔で効率的な方法を提供します。

以上がSQL Server の再帰的自己結合はどのようにして階層データを効率的に取得できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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