WITH RECURSIVE ManagedByJames(Level, ID, FName, LName) AS ( -- start with this row SELECT 1, ID, FName, LName FROM Employees WHERE ID = 1 UNION ALL -- get employees that have any of the previously selected rows as manager SELECTManagedByJames.Level+ 1, Employees.ID, Employees.FName, Employees.LName FROM Employees JOIN ManagedByJames ONEmployees.ManagerID= ManagedByJames.ID ORDER BY 1 DESC -- depth-first search ) SELECT * FROM ManagedByJames;
| 水平 | ID | 姓名 | 名称 |
|---|---|---|---|
| 1 | 1 | 詹姆士 | 史密斯 |
| 2 | 2 | 约翰 | 约翰逊 |
| 3 | 4 | 约翰松 | 史密斯 |
| 2 | 3 | 麦可 | 威廉姆斯 |