2010-10-04 38 views
5

phép nói rằng tôi có bảng sausql đệ quy chức năng - để tìm nhà quản lý

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

Về cơ bản các yêu cầu là để kéo tất cả các nhà quản lý dưới sự user_id bạn đang tìm kiếm. Vì vậy, ví dụ nếu tôi gửi trong 'Linda' sau đó nó phải trả lại cho tôi:

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

hoặc nếu tôi gửi trong 'Mark' sau đó nó phải trả lại cho tôi:

Steve 

Tôi đã nghe nói về hàm đệ quy nhưng tôi không chắc chắn làm thế nào để làm điều này. Bất kỳ trợ giúp sẽ được đánh giá cao.

Trả lời

6

Sử dụng:

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 

ResultSet:

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

Scripts:

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

Nhờ làm việc này một cách hoàn hảo, câu hỏi nhanh chóng. Có anyway để đặt kết quả trong một mảng vì vậy tôi có thể sử dụng nó trong câu lệnh chọn của tôi – Jacob

+0

@Jacob: Bạn có thể tham gia vào tên của CTE, giống như bạn làm cho bất kỳ bảng hoặc khung nhìn nào –