sql递归函数 - 查找管理器

Jac*_*cob 5 sql t-sql sql-server stored-procedures recursive-query

可以说我有下表

User_ID  Manager_ID  
---------------------
Linda        Jacob  
Mark         Linda  
Kevin        Linda  
Steve        Mark  
John         Kevin
Run Code Online (Sandbox Code Playgroud)

基本上,要求是将所有管理器拉到您要搜索的user_id下.所以,例如,如果我发送'琳达'然后它应该返回我:

'Mark', 'Kevin', 'Steve', 'John'  
Run Code Online (Sandbox Code Playgroud)

或者,如果我发送'马克',那么它应该归还给我:

Steve
Run Code Online (Sandbox Code Playgroud)

我听说过递归函数,但我不确定如何做到这一点.任何帮助,将不胜感激.

OMG*_*ies 6

使用:

WITH hieararchy AS (
   SELECT t.user_id
     FROM YOUR_TABLE t
    WHERE t.manager_id = 'Linda'
   UNION ALL
   SELECT t.user_id
     FROM YOUR_TABLE t
     JOIN hierarchy h ON h.user_id = t.manager_id)
SELECT x.*
  FROM hierarchy x
Run Code Online (Sandbox Code Playgroud)

结果集:

user_id
--------
Mark
Kevin
John
Steve
Run Code Online (Sandbox Code Playgroud)

脚本:

CREATE TABLE [dbo].[YOUR_TABLE](
 [user_id] [varchar](50) NOT NULL,
 [manager_id] [varchar](50) NOT NULL
)

INSERT INTO YOUR_TABLE VALUES ('Linda','Jacob')
INSERT INTO YOUR_TABLE VALUES ('Mark','Linda')
INSERT INTO YOUR_TABLE VALUES ('Kevin','Linda')
INSERT INTO YOUR_TABLE VALUES ('Steve','Mark')
INSERT INTO YOUR_TABLE VALUES ('John','Kevin')
Run Code Online (Sandbox Code Playgroud)