ホームページ >データベース >mysql チュートリアル >SQL Server の再帰 CTE はカテゴリとその祖先パスをどのように取得できますか?
SQL Server の再帰共通テーブル式 (CTE) を使用した自己参照クエリ
はじめに
リレーショナル データベースでは、自己参照クエリは、単一テーブル内の階層関係を横断するための強力な手法です。 SQL Server はこの目的のために共通テーブル式 (CTE) を提供し、効率的で表現力豊かな再帰クエリを可能にします。
質問
ID、Name、ParentId 列を含む単純化された「Category」テーブルを考えてみましょう。次の例に示すように、テーブルはカテゴリの不定階層をサポートしています:
<code>Id Name ParentId 1 Business NULL 2 Laptops 1 3 Asus 2</code>
目標は、指定されたカテゴリ (「ビジネス ラップトップ」など) を取得するだけでなく、そのすべての親カテゴリのカンマ区切りリストも提供するクエリを構築することです。
解決策: 再帰的 CTE
この問題を解決するには、再帰的 CTE を使用できます。最も外側の CTE は再帰の開始点を定義し、再帰項は拡張階層のロジックを定義します:
<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>
クエリ
指定されたカテゴリとその親カテゴリを取得するには、単純なクエリを使用します。
<code>SELECT Id, Name, Path FROM CTE WHERE Name = 'Business Laptops'</code>
結果
クエリは次の結果を返します:
<code>Id Name Path 2 Laptops Business,Laptops</code>
この例では、「Business Laptops」は「Business」の子である「Laptops」の子です。 「パス」列には、ルート カテゴリに戻る完全な階層パスが表示されます。
結論
SQL Server の再帰 CTE は、テーブル内の階層関係をナビゲートするための洗練された効率的な方法を提供します。再帰の力を活用することで、複雑なクエリを構築して、階層データ構造から貴重な洞察を抽出できます。
以上がSQL Server の再帰 CTE はカテゴリとその祖先パスをどのように取得できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。