Рекурсивный запрос SQL Server

В таблице reviewers с такой структурой:

reviewer | reviewee
===================
2        |      1
3        |      2
4        |      3
5        |      4

В вызове функции я знаю как reviewer-id, так и reviewee-id (владелец элемента, который рецензент хочет получить).

Теперь я пытаюсь отправить запрос, который перебирает все записи в таблице рецензентов, начиная с рецензента и заканчивая идентификатором рецензента (и сопоставляет его с известным мне идентификатором рецензента). Поэтому я пытаюсь выяснить, есть ли вообще связь между рецензентом и рецензентом.

Можно ли это сделать в одном запросе?


person doque    schedule 18.12.2012    source источник


Ответы (1)


Ты можешь это сделать:

WITH CTE
AS
(
   SELECT reviewer, reviewee
   FROM TableName 
   WHERE reviewee = @revieweeID
   UNION ALL
   SELECT p.reviewer, p.reviewee 
   FROM CTE c
   INNER JOIN TableName p ON c.reviewee = p.reviewer
)
SELECT * 
FROM CTE;
--- WHERE reviewer = @reviewerID;

Демо

person Mahmoud Gamal    schedule 18.12.2012
comment
Вы должны начать ставить знак конца оператора (точку с запятой) в конце оператора (там, где он должен быть), а не в начале: sqlskills.com/blogs/bobb/post/ или sqlblog.com/blogs/aaron_bertrand/archive/2012/09/25/16567.aspx - person a_horse_with_no_name; 18.12.2012