5

可以说我有下表

User_ID  Manager_ID  
---------------------
Linda        Jacob  
Mark         Linda  
Kevin        Linda  
Steve        Mark  
John         Kevin

基本上,要求是拉出您正在搜索的 user_id 下的所有经理。因此,例如,如果我发送“Linda”,那么它应该返回给我:

'Mark', 'Kevin', 'Steve', 'John'  

或者如果我发送“标记”,那么它应该返回给我:

Steve

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

4

2 回答 2

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

结果集:

user_id
--------
Mark
Kevin
John
Steve

脚本:

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')
于 2010-10-04T23:34:49.333 回答
0

MSDN 上Recursive Queries Using Common Table Expressions的代码示例正好说明了这一点。

于 2010-10-04T23:31:25.137 回答