5

Bảng My chứa Ba cột và giá trị trông giống như sauSql truy vấn để tìm tất cả các cấp dưới thuộc một đơn vượt trội

Emp_ID | Emp_Name | Emp_Manager_ID 
======================================== 
1  | Admin  | Null   
2  | John  | 1    
3  | Sam  | 2    
4  | Mike  | 2    
5  | Jeff  | 4    
6  | Ben  | 3    
7  | Vicky  | 5 

Các tham số id @Emp_ID = 2 Kết quả dự kiến ​​sẽ tìm thấy tất cả các cấp dưới dưới các Emp_Id cho nên kết quả phải được tất cả EmpIDs 3,4,5,6,7 vì 2 là người quản lý của 3,4 và 3 là người quản lý của 6, 4 là người quản lý của 5 và 5 được người quản lý của 7

+0

Tôi đã cập nhật câu trả lời của tôi để bao gồm một ví dụ về CTE làm việc. Hãy cho tôi biết nếu bạn gặp phải các vấn đề khác với nó. –

+0

@Adam Cảm ơn nó hoạt động tốt –

Trả lời

7

Sử dụng một Recursing CTE . Điều này hiện trả về cả ba cột. Xóa Emp_NameEmp_Manager_ID khỏi SELECT nếu bạn không yêu cầu thông tin đó.

WITH Subordinates AS 
(
    SELECT e.Emp_ID, e.Emp_Name, e.Emp_Manager_ID 
    FROM Employee AS e 
    WHERE e.Emp_Manager_ID = 2 

    UNION ALL 

    SELECT e.Emp_ID, e.Emp_Name, e.Emp_Manager_ID 
    FROM Employee AS e 
    INNER JOIN Subordinates AS sub ON e.Emp_Manager_ID = sub.Emp_ID 
) 
SELECT s.Emp_ID, s.Emp_Name, s.Emp_Manager_ID 
FROM Subordinates AS s 

Example of query running using Employee_ID = 1:

+0

Vấn đề đã được giải quyết trong bảng của tôi id quản lý phát triển đầu tiên là 1 nó đi qua một vòng lặp vô hạn sau đó –

Các vấn đề liên quan