Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Nhận tất cả các bậc cha mẹ cho một đứa trẻ

Hãy thử điều này để nhận được tất cả các bậc cha mẹ của một đứa trẻ

;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

Nhấp vào đây để xem kết quả

CHỈNH SỬA:

Nếu bạn muốn chèn vào một biến bảng, bạn có thể làm như sau:

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

Nhấp vào đây để xem kết quả



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách sys.dm_exec_describe_first_result_set hoạt động trong SQL Server

  2. Không sử dụng sp_depends trong SQL Server (nó không được dùng nữa)

  3. Các thay đổi về cấp phép Common Sense cho SQL Server 2014 Standard Edition

  4. Máy chủ SQL tương đương với GROUP_CONCAT ()

  5. Tạo mặt nạ dữ liệu động trong SQL Server cho người dùng nâng cao