Это мой стол:Родительский родитель SQL Server (родительский видит все)?
EmployeeID Employee ManagerID
---------------------------------
1 Anna 5
2 John 4
3 Steve 4
4 Lisa 1
5 Adam NULL
6 Per 1
Там нет никаких проблем для меня, чтобы получить родитель и отношения ребенка с автообъединением так:
SELECT
E.EmployeeID,
E.Employee AS Employee,
E.ManagerID,
M.Employee AS Manager
FROM
Employee AS E
LEFT JOIN
Employee AS M ON E.ManagerID = M.EmployeeID
EmployeeID Employee ManagerID Manager
1 Anna 5 Adam
2 John 4 Lisa
3 Steve 4 Lisa
4 Lisa 1 Anna
5 Adam NULL NULL
6 Per 1 Anna
Однако, как бы я идти о делать Убедитесь, что родительский элемент отображает весь уровень иерархии?
Я хотел бы таблицу выглядеть следующим образом:
EmployeeID Manager Employee EmployeeID
5 Adam Anna 1
5 Adam Per 6
5 Adam Lisa 4
5 Adam John 2
5 Adam Steve 3
1 Anna Per 6
1 Anna Lisa 4
1 Anna John 2
1 Anna Steve 3
4 Lisa John 2
4 Lisa Steve 3
Примечание: в этом примере я только 3 уровня сене, но может быть гораздо больше
SQL Server имеет тип hierarchyid' в течение этого. –
Альтернативный подход заключается в использовании [рекурсивного CTE] (https://technet.microsoft.com/en-us/library/ms186243%28v=sql.105%29.aspx?f=255&MSPPError=-2147217396). В зависимости от количества записей и количества уровней вы можете обнаружить, что этот метод будет немного медленным. –
Привет, Да, я смотрел рекурсивный CTE, но не полностью понял, как использовать его без знания уровней. У вас есть пример этого вопроса, из которого я могу перейти? – Nils