Skip to content
Advertisement

How to select all parents of a child from a table

I am using SQL Server.

My table is called Employees.

It looks like this:

EmpID   ManagerID   EmpName
-----   ---------   -------
1       NULL        Ali
2       1           Mike
3       1           Tom
4       2           Kim
5       2           Rob
6       3           Lay
7       5           Paul
8       7           Sam
9       6           Bin

I am trying to build a query that returns all parents of the children

So the query would return the parents of Bin and Sam are

Bin, Lay, Tom, Ali
Sam, Paul, Rob, Mike, Ali

I tried this but wasn’t successful

SELECT * 
FROM Employees A 
LEFT OUTER JOIN Employees B ON A.ParentID  = B.EmpID 
WHERE A.EmpID IN (8,9)

but this can only work for 1 parent

How can I get the whole list of parents (managers)?

Advertisement

Answer

Use recursive cte

WITH Parent AS
(
    SELECT *
        FROM Employees WHERE EmpID IN (8,9)
    UNION ALL
    SELECT emp.*
        FROM Employees emp JOIN Parent ON emp.EmpID = Parent.ManagerID
)
SELECT distinct * FROM Parent
User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement