SQL рекурсивная функция - найти менеджеров - PullRequest
5 голосов
/ 05 октября 2010

Допустим, у меня есть следующая таблица

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

По сути, требование состоит в том, чтобы вытащить всех менеджеров под user_id, который вы ищете.Так, например, если я отправлю «Линду», она должна вернуть мне:

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

или, если я отправлю «Марк», она должна вернуть мне:

Steve

У меня естьслышал о рекурсивной функции, но я не уверен, как это сделать.Любая помощь будет оценена.

Ответы [ 2 ]

6 голосов
/ 05 октября 2010

Использование:

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')
0 голосов
/ 05 октября 2010
...