У меня есть таблица учителей, и каждый учитель также может быть директором. Я должен представить одного учителя и всех его руководителей. Он хорошо справляется с этой задачей в этом коде:
WITH teacherTablecte AS
(SELECT teacher.IdTeacher, teacher.FirstName, teacher.LastName,
teacher.PhoneNumber,teacher.ManagerId, 1 as 'EmpLevel', boss.[FirstName]+'
'+boss.LastName as bossName
FROM [dbo].[T_Teachers] teacher JOIN [dbo].[T_Teachers] boss
ON teacher.ManagerId = boss.IdTeacher
WHERE teacher.IdTeacher =2011
UNION ALL
SELECT teacher.IdTeacher, teacher.FirstName, teacher.LastName,
teacher.PhoneNumber,teacher.ManagerId, teacherTablecte.EmpLevel + 1, boss.
[FirstName]+' '+boss.LastName
FROM [dbo].[T_Teachers] teacher
JOIN teacherTablecte
ON teacher.IdTeacher = teacherTablecte.ManagerId JOIN [dbo].[T_Teachers]
boss on
teacher.MANAGERID= boss.IdTeacher
)
SELECT *
FROM teacherTablecte
Но он не знакомит меня с главным исполнительным директором, который я пытался преобразовать
WITH teacherTablecte AS
(SELECT teacher.IdTeacher, teacher.FirstName, teacher.LastName,
teacher.PhoneNumber,teacher.ManagerId, 1 as 'EmpLevel', boss.[FirstName]+'
'+boss.LastName as
bossName
FROM [dbo].[T_Teachers] teacher JOIN [dbo].[T_Teachers] boss
ON teacher.ManagerId = boss.IdTeacher
WHERE teacher.IdTeacher =2011
UNION ALL
SELECT teacher.IdTeacher, teacher.FirstName, teacher.LastName,
teacher.PhoneNumber,teacher.ManagerId, teacherTablecte.EmpLevel + 1, boss.
[FirstName]+'
'+boss.LastName
FROM [dbo].[T_Teachers] teacher
JOIN teacherTablecte
ON teacher.IdTeacher = teacherTablecte.ManagerId OUTER JOIN [dbo].
[T_Teachers] boss on
teacher.MANAGERID= boss.IdTeacher
)
SELECT *
FROM teacherTablecte
, но JOIN во OUTER JOIN, но я получить эту ошибку: Msg 462, Level 16, State 1, Line 2 Внешнее соединение не разрешено в рекурсивной части рекурсивного общего табличного выражения «teacherTablecte».