sql >> データベース >  >> RDS >> Sqlserver

SQLServerの再帰的自己結合

    再帰クエリを救助する....

    サンプルテーブルを作成して入力します(お願い 今後の質問でこのステップを保存してください):

    DECLARE @T as table
    (
        id int,
        name varchar(100),
        parent_id int
    )
    
    INSERT INTO @T 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)
    

    cte:

    ;WITH CTE AS
    (
        SELECT id, name, name as path, parent_id
        FROM @T 
        WHERE parent_id IS NULL
        UNION ALL
        SELECT t.id, t.name, cast(cte.path +','+ t.name as varchar(100)), t.parent_id
        FROM @T t
        INNER JOIN CTE ON t.parent_id = CTE.id
    )
    

    クエリ:

    SELECT id, name, path
    FROM CTE
    

    結果:

    id      name        path
    1       A           A
    5       B           B
    6       B.1         B,B.1
    8       B.2         B,B.2
    7       B.1.1       B,B.1,B.1.1
    2       A.1         A,A.1
    3       A.2         A,A.2
    4       A.1.1       A,A.1,A.1.1
    9       A.1.1.1     A,A.1,A.1.1,A.1.1.1
    10      A.1.1.2     A,A.1,A.1.1,A.1.1.2
    

    rextesterのオンラインデモを見る




    1. SQLServerのさまざまな制約の調査

    2. SQL Serverで参照エンティティを検索します:sys.dm_sql_referencing_entities()

    3. 自動化されたクラウドデータベース展開のガイド

    4. SQLで先週の最終日を取得するにはどうすればよいですか?