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

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

Susan Sarandon
リリース: 2024-12-30 14:06:14
オリジナル
196 人が閲覧しました

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

SQL Server 2005 での階層データの取得

多くの開発者は、特に複雑なオブジェクト階層を扱う場合に、SQL Server 2005 から階層データを取得することに苦労しています。 。これは主に、Oracle データベースで階層クエリに使用できる強力な機能である CONNECT_BY 句が欠如していることが原因です。

1 つの方法は、各子レコードの親の ID を含む列を持つ自己参照テーブルを作成することです。 。その後、ビューを使用して子を階層レベルにマップできます。さらに、複雑なクエリを使用して、親と子を結び付けることができます。この方法は機能しますが、煩雑で非効率になる可能性があります。

SQL Server 2005 の階層クエリに対するより洗練されたソリューションは、Common Table Expressions (CTE) を利用することです。 CTE を使用すると、クエリ内で一時テーブルを作成でき、複雑な階層構造に使用できます。

次の例は、階層テーブルを作成し、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
ログイン後にコピー

出力:

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 サイトの他の関連記事を参照してください。

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