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

子供のためにすべての親を取得します

    これを試して、子供のすべての親を取得します

    ;with name_tree as 
    (
       select id, parentid
       from Users
       where id = 47897 -- this is the starting point you want in your recursion
       union all
       select C.id, C.parentid
       from Users c
       join name_tree p on C.id = P.parentid  -- this is the recursion
       -- Since your parent id is not NULL the recursion will happen continously.
       -- For that we apply the condition C.id<>C.parentid 
        AND C.id<>C.parentid 
    ) 
    -- Here you can insert directly to a temp table without CREATE TABLE synthax
    select *
    INTO #TEMP
    from name_tree
    OPTION (MAXRECURSION 0)
    
    SELECT * FROM #TEMP
    

    結果を表示するには、ここをクリックしてください

    編集:

    テーブル変数に挿入する場合は、次のように実行できます。

    -- Declare table varialbe
    Declare @TABLEVAR table (id int ,parentid int)
    
    
    ;with name_tree as 
    (
       select id, parentid
       from #Users
       where id = 47897 -- this is the starting point you want in your recursion
       union all
       select C.id, C.parentid
       from #Users c
       join name_tree p on C.id = P.parentid  -- this is the recursion
       -- Since your parent id is not NULL the recursion will happen continously.
       -- For that we apply the condition C.id<>C.parentid 
        AND C.id<>C.parentid 
    ) 
    -- Here you can insert directly to table variable
    INSERT INTO @TABLEVAR
    select *
    from name_tree
    OPTION (MAXRECURSION 0)
    
    SELECT * FROM @TABLEVAR
    

    結果を表示するには、ここをクリックしてください



    1. SQLでDENSE_RANK()を使用して行にランキング位置を追加する方法

    2. SQL Serverテーブルの主キーをどのように一覧表示しますか?

    3. Oracleでネストされたトランザクションを使用する

    4. SQL Serverで時間を比較するにはどうすればよいですか?