SQL рекурсивный запрос
У меня есть категория таблицы,
1) Идентификатор
2) CategoryName
3) CategoryMaster
с данными как:
1 Компьютеры 0
2 Программное обеспечение 1
3 Мультимедиа 1
4 Анимация 3
5 Здоровье 0
6 Healthsub 5
и я создал рекурсивный запрос как:
;WITH CategoryTree AS
(
SELECT *, CAST(NULL AS VARCHAR(50)) AS ParentName, 0 AS Generation
FROM dbo.Category
WHERE CategoryName = 'Computers'
UNION ALL
SELECT Cat.*,CategoryTree.CategoryName AS ParentName, Generation + 1
FROM dbo.Category AS Cat INNER JOIN
CategoryTree ON Cat.CategoryMaster = CategoryTree.Id
)
SELECT * FROM CategoryTree
Я получаю результаты для родительской категории снизу, как я получаю все подкатегории для компьютера
но я хочу получить результаты снизу вверх, например, от анимации до компьютеров, пожалуйста, кто-нибудь может подсказать мне правильное направление.
Заранее спасибо:)
1 ответ
Решение
Просто поменяйте поля в предложении объединения:
WITH CategoryTree AS
(
SELECT *, 0 AS Generation
FROM dbo.Category
WHERE CategoryName = 'Animation'
UNION ALL
SELECT Cat.*, Generation + 1
FROM CategoryTree
JOIN dbo.Category AS Cat
ON Cat.Id = CategoryTree.CategoryMaster
)
SELECT *
FROM CategoryTree