SQL Server で再帰的自己結合を使用して階層データを表すヒント
Id、Name、および ParentId 列を含む「カテゴリー」というテーブルがあり、カテゴリー内に無制限の階層を作成できるとします。ビジネス ラップトップ カテゴリとそのすべての祖先カテゴリを表示するには、再帰共通テーブル式 (CTE) の機能を利用できます。
サンプルの「カテゴリ」テーブルを作成し、ソリューションを説明するためにデータを入力してみましょう:
<code class="language-sql">DECLARE @Categories AS TABLE ( Id INT, Name VARCHAR(100), ParentId INT ); INSERT INTO @Categories VALUES (1, 'A', NULL), (2, 'A.1', 1), (3, 'A.2', 1), (4, 'A.1.1', 2), (5, 'B', NULL), (6, 'B.1', 5), (7, 'B.1.1', 6), (8, 'B.2', 5), (9, 'A.1.1.1', 4), (10, 'A.1.1.2', 4);</code>
次に、「PathFinder」と呼ばれる再帰的 CTE を作成して、親子関係を反復し、祖先名を「Path」列に連結します。
<code class="language-sql">WITH PathFinder AS ( SELECT Id, Name, Name AS Path, ParentId FROM @Categories WHERE ParentId IS NULL UNION ALL SELECT t.Id, t.Name, CAST(cf.Path + ', ' + t.Name AS VARCHAR(100)), t.ParentId FROM @Categories t INNER JOIN PathFinder cf ON t.ParentId = cf.Id )</code>
最後に、PathFinder CTE を使用して、「ビジネス ラップトップ」カテゴリの名前とその祖先を取得できます。
<code class="language-sql">SELECT Name, Path FROM PathFinder WHERE Name = 'Business Laptops';</code>
このクエリは、カテゴリ名とその祖先をカンマで区切って返します。
再帰クエリの内訳は次のとおりです:
この再帰的アプローチを使用すると、SQL Server で階層データを効率的に表現し、クエリを実行できます。これは、固有の関係を持つデータを管理および分析するための貴重な手法となります。
以上がSQL Server で再帰的自己結合を使用して階層データの祖先を表示する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。