ホームページ > データベース > mysql チュートリアル > SQL Server の再帰 CTE はカテゴリとその祖先パスをどのように取得できますか?

SQL Server の再帰 CTE はカテゴリとその祖先パスをどのように取得できますか?

Susan Sarandon
リリース: 2025-01-15 11:30:44
オリジナル
556 人が閲覧しました

How Can Recursive CTEs in SQL Server Retrieve a Category and its Ancestor Path?

SQL Server の再帰共通テーブル式 (CTE) を使用した自己参照クエリ

はじめに

リレーショナル データベースでは、自己参照クエリは、単一テーブル内の階層関係を横断するための強力な手法です。 SQL Server はこの目的のために共通テーブル式 (CTE) を提供し、効率的で表現力豊かな再帰クエリを可能にします。

質問

ID、Name、ParentId 列を含む単純化された「Category」テーブルを考えてみましょう。次の例に示すように、テーブルはカテゴリの不定階層をサポートしています:

1

2

3

4

<code>Id     Name       ParentId

1      Business   NULL

2      Laptops    1

3      Asus       2</code>

ログイン後にコピー

目標は、指定されたカテゴリ (「ビジネス ラップトップ」など) を取得するだけでなく、そのすべての親カテゴリのカンマ区切りリストも提供するクエリを構築することです。

解決策: 再帰的 CTE

この問題を解決するには、再帰的 CTE を使用できます。最も外側の CTE は再帰の開始点を定義し、再帰項は拡張階層のロジックを定義します:

1

2

3

4

5

6

7

8

9

<code>WITH CTE AS (

    SELECT Id, Name, Name AS Path, ParentId

    FROM Categories

    WHERE ParentId IS NULL

    UNION ALL

    SELECT t.Id, t.Name, cast(cte.Path + ',' + t.Name as varchar(100)), t.ParentId

    FROM Categories t

    INNER JOIN CTE ON t.ParentId = CTE.Id

)</code>

ログイン後にコピー

クエリ

指定されたカテゴリとその親カテゴリを取得するには、単純なクエリを使用します。

1

2

3

<code>SELECT Id, Name, Path

FROM CTE

WHERE Name = 'Business Laptops'</code>

ログイン後にコピー

結果

クエリは次の結果を返します:

1

2

<code>Id     Name       Path

2      Laptops    Business,Laptops</code>

ログイン後にコピー

この例では、「Business Laptops」は「Business」の子である「Laptops」の子です。 「パス」列には、ルート カテゴリに戻る完全な階層パスが表示されます。

結論

SQL Server の再帰 CTE は、テーブル内の階層関係をナビゲートするための洗練された効率的な方法を提供します。再帰の力を活用することで、複雑なクエリを構築して、階層データ構造から貴重な洞察を抽出できます。

以上がSQL Server の再帰 CTE はカテゴリとその祖先パスをどのように取得できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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