Я пытаюсь написать рекурсивный запрос в SQL Server, который в основном перечисляет иерархию «родитель-потомок» от данного родителя. Родитель может иметь несколько детей, и ребенок может принадлежать нескольким родителям, поэтому он хранится в отношении «многие ко многим».
Я изменил следующий запрос из другого, несколько связанного вопроса, однако он не доходит до дерева и выбирает только дочерний элемент первого уровня ...
DECLARE @ObjectId uniqueidentifier
SET @ObjectId = '1A213431-F83D-49E3-B5E2-42AA6EB419F1';
WITH Tree AS
(
SELECT A.*
FROM Objects_In_Objects A
WHERE A.ParentObjectId = @ObjectId
UNION ALL
SELECT B.*
FROM Tree A
JOIN Objects_In_Objects B
ON A.ParentObjectId = B.ObjectId
)
SELECT *
FROM Tree
INNER JOIN Objects ar on tree.ObjectId = ar.ObjectId
Кто-нибудь знает, как изменить запрос, чтобы он прошел весь путь по «дереву»? Или это невозможно при использовании вышеуказанной конструкции?
Предметы
Столбцы: ObjectId
| Name
Objects_In_Objects
Столбцы: ObjectId
| ParentObjectId
Пример данных:
Предметы
ObjectId | Name
1A213431-F83D-49E3-B5E2-42AA6EB419F1 | Main container
63BD908B-54B7-4D62-BE13-B888277B7365 | Sub container
71526E15-F713-4F03-B707-3F5529D6B25E | Sub container 2
ADA9A487-7256-46AD-8574-0CE9475315E4 | Object in multiple containers
Объекты в объектах
ObjectId | ParentObjectId
ADA9A487-7256-46AD-8574-0CE9475315E4 | 71526E15-F713-4F03-B707-3F5529D6B25E
ADA9A487-7256-46AD-8574-0CE9475315E4 | 63BD908B-54B7-4D62-BE13-B888277B7365
63BD908B-54B7-4D62-BE13-B888277B7365 | 1A213431-F83D-49E3-B5E2-42AA6EB419F1
71526E15-F713-4F03-B707-3F5529D6B25E | 1A213431-F83D-49E3-B5E2-42AA6EB419F1