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

Získejte všechny rodiče pro dítě

Zkuste to, abyste získali všechny rodiče dítěte

;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

Kliknutím sem zobrazíte výsledek

UPRAVIT:

Pokud chcete vložit do tabulky proměnnou, můžete udělat něco jako:

-- 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

Kliknutím sem zobrazíte výsledek



  1. Osvědčený vícejazyčný web

  2. TSQL:Vytvořte pohled, který přistupuje k více databázím

  3. Jaký je nejrychlejší způsob výpočtu mediánu?

  4. Jak mohu použít kaskádové mazání se serverem SQL?