Почему мы не можем использовать внешние соединения в рекурсивном CTE?

Рассмотрим ниже

;WITH GetParentOfChild AS
    (
        SELECT 
            Rn = ROW_NUMBER() Over(Order By (Select 1))
            ,row_id AS Parents
            ,parent_account_id  As ParentId 
        FROM siebelextract..account
        WHERE row_id = @ChildId
        UNION ALL
        SELECT 
            Rn + 1
            ,a.row_id as Parents
            ,a.parent_account_id As ParentId    
        FROM siebelextract..account a
        JOIN GetParentOfChild gp on a.row_id = gp.ParentId
    )

SELECT TOP 1 @ChildId = Parents 
FROM GetParentOfChild
ORDER BY Rn DESC

Что он делает, так это то, что для любого дочернего элемента он возвращает родительский элемент корневого уровня ....Программа прекрасно работает все время ...

Просто из любопытства / экспериментов я изменил JOIN на Left Outer Join, и он сообщил

Msg 462, Level 16, State 1, Procedure GetParent, Line 9 Внешнее соединение не допускается в рекурсивной части рекурсивного общего табличного выражения GetParentOfChild.

У меня вопрос: почему рекурсивная часть CTE не может принимать левое внешнее соединение? Это задумано?

Спасибо

11
задан user1025901 3 February 2012 в 09:53
поделиться