ホームページ >データベース >mysql チュートリアル >SQL Server 2005 の自己参照テーブルから階層データを効率的に取得するにはどうすればよいですか?
SQL Server 2005 での階層データの移動
SQL Server 2005 からの階層データの取得は、特に自己参照を扱う場合に困難になることがあります。子レコードが親の ID を指すテーブル。ビューと複雑なクエリは一般的に使用されますが、多くの場合、優雅さや効率性に欠けます。
1 つのソリューションでは、共通テーブル式 (CTE) を利用して階層構造を構築し、各項目のパスを生成します。このアプローチには、Parent という名前の CTE の作成が含まれます。これは、ルート ノード (ParentID は NULL) とその名前をパスとして選択することから始まります。次に、子ノードを再帰的に追加し、その名前を親パスに連結します。
次のコードは、このアプローチを示しています。
CREATE TABLE tblHierarchy (ID int, ParentID int NULL, Name varchar(128)); INSERT INTO tblHierarchy VALUES (1, NULL, '1'); INSERT INTO tblHierarchy VALUES (2, NULL, '2'); INSERT INTO tblHierarchy VALUES (3, NULL, '3'); INSERT INTO tblHierarchy VALUES (4, 1, '1.1'); INSERT INTO tblHierarchy VALUES (5, 1, '1.2'); INSERT INTO tblHierarchy VALUES (6, 4, '1.1.1'); WITH Parent AS ( SELECT ID, ParentID, Name AS Path FROM tblHierarchy WHERE ParentID IS NULL UNION ALL SELECT TH.ID, TH.ParentID, CONVERT(varchar(128), Parent.Path + '/' + TH.Name) AS Path FROM tblHierarchy TH INNER JOIN Parent ON Parent.ID = TH.ParentID ) SELECT * FROM Parent
この CTE は、追加の列 Path を持つ階層テーブルを作成します。各ノードへの完全なパス。結果のクエリ出力は次のようになります。
ID ParentID Path 1 NULL 1 2 NULL 2 3 NULL 3 4 1 1/1.1 5 1 1/1.2 6 4 1/1.1/1.1.1
このアプローチは、SQL Server 2005 の自己参照テーブルから階層データを取得するクリーンで効率的な方法を提供します。これにより、複雑な手動クエリの必要性がなくなり、次のことが可能になります。階層のナビゲーションが簡単になりました。
以上がSQL Server 2005 の自己参照テーブルから階層データを効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。