ホームページ >データベース >mysql チュートリアル >CONNECT_BY を使用せずに SQL Server 2005 で階層データを効率的に取得するにはどうすればよいですか?

CONNECT_BY を使用せずに SQL Server 2005 で階層データを効率的に取得するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-20 12:02:17339ブラウズ

How Can I Efficiently Retrieve Hierarchical Data in SQL Server 2005 Without CONNECT_BY?

SQL Server 2005 からの階層データの取得

SQL Server 2005 には使い慣れた CONNECT_BY 句がないため、階層データの取得に課題が生じる可能性があります。一般的なアプローチの 1 つは、階層を横断して目的の出力を構築する再帰共通テーブル式 (CTE) の作成です。

オブジェクトの階層を含む自己参照テーブルの例を考えてみましょう。各子レコードには、列とその親の ID。 CTE を使用すると、階層関係を取得し、各項目のパスを作成できます。

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

OUTPUT:

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

CTE を利用することで、階層を再帰的に横断して各項目のパスを蓄積し、構造化された方法で目的の階層データを簡単に取得できます。このアプローチは、SQL Server 2005 で階層データを管理およびクエリするための柔軟で効率的なソリューションを提供します。

以上がCONNECT_BY を使用せずに SQL Server 2005 で階層データを効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。