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

SQL を使用して、データベースで表されるツリー構造を複製する

    Quassnoi からのクエリに基づいて、これを試してください の記事 Adjacency List vs Nested Sets :SQL サーバー :

    WITH q AS
    (
        SELECT  h.*, 1 AS level
        FROM    Table1 h
        WHERE   id = 3
        UNION ALL
        SELECT  hp.*, level + 1
        FROM    q
        JOIN    Table1 hp
        ON      hp.id = q.ParentGroupID
    ), q2 AS (
        SELECT
            ID,
            ParentGroupID,
            SomeValue,
            (SELECT MAX(level) FROM q) - level AS level
        FROM q
    )
    INSERT INTO table1
    SELECT
        (SELECT MAX(ID) FROM Table1) + level + 1 AS ID,
        CASE WHEN level = 0 THEN -1
             ELSE (SELECT MAX(ID) FROM Table1) + level
        END AS ParentGroupID,
        SomeValue + '-cloned'
    FROM    q2
    

    テスト データで実行した結果:

    ID  ParentGroupID  SomeValue  
    1   -1             a          
    2   1              b          
    3   2              c          
    4   -1             a-cloned
    5   4              b-cloned
    6   5              c-cloned
    


    1. PHPはコンマを<br/>に変換します

    2. リスニングポートによるLAN上のMySQLサーバーの検出(Inno Setup)

    3. 文字列列で見つかった番号を削除します

    4. Sql Server 2008 MERGE - カウントを取得する最良の方法