sql >> Databáze >  >> RDS >> Sqlserver

Použijte SQL ke klonování stromové struktury reprezentované v databázi

Zkuste to na základě dotazu od Quassnoi článek uživatele Adjacency List vs. Nested Sets :SQL Server :

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

Výsledek při spuštění na vašich testovacích datech:

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. Souhrnná kliknutí na reklamy a zobrazení

  2. Oracle Trigger na vnořené tabulce

  3. Jak uložit a načíst bajtové pole (obrázková data) do az databáze SQLite?

  4. Vytváření pohledů napříč různými databázemi