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

親と無限の子を返すステートメントを選択します

    したがって、この回答を参照してください:

    SQLServerCTE親子再帰

    スキーマの動作バージョンは次のとおりです:

    テーブル作成スクリプト

    CREATE TABLE YOUR_TABLE
        ([ID] int, [ParentID] int, [Name] varchar(21))
    ;
        
    INSERT INTO YOUR_TABLE
        ([ID], [ParentID], [Name])
    VALUES
        (1, NULL, 'A root'),
        (2, NULL, 'Another root'),
        (3, 1, 'Child of 1'),
        (4, 3, 'Grandchild of 1'),
        (5, 4, 'Great grandchild of 1'),
        (6, 1, 'Child of 1'),
        (7, NULL, 'Another root'),
        (8, 7, 'Child of 6')
    ;
    

    再帰CTE

    DECLARE @ID INT = 1
    
    ;WITH ParentChildCTE
    AS (
        SELECT ID, ParentId, Name        
        FROM YOUR_TABLE
        WHERE Id = @ID
    
        UNION ALL
    
        SELECT T1.ID, T1.ParentId, T1.Name        
        FROM YOUR_TABLE T1
        INNER JOIN ParentChildCTE T ON T.ID = T1.ParentID
        WHERE T1.ParentID IS NOT NULL
        )
    SELECT *
    FROM ParentChildCTE
    

    重要な部分はCTEにあります UNION ALLの作成 結果セットに再び参加し、IDに参加します ParentIdへ 、レベル数を制限しません。



    1. PostgreSQLでの重複更新時に挿入しますか?

    2. 2つの行の間の時間差を計算します

    3. MicrosoftAccessデータベースのSQLServerへの移行

    4. 不明からテキストへの変換関数が見つかりませんでした