У меня есть таблицы (для простоты), как указано ниже:
Category
--------------------
CategoryId (0 for root nodes)
ParentCategoryId
ProductCategory
--------------------
ProductId
CategoryId
Я бы хотел получить отдельный список всех категорий и их унаследованных продуктов (вплоть до категории 0). Категория 0 должна включать ВСЕ продукты, а все другие категории должны следовать иерархии настолько бесконечно, насколько это возможно.
Пример таблицы содержимого:
CategoryId, ParentCategoryId
---------------------
1, 0
2, 0
3, 0
10, 1
20, 2
ProductId, CategoryId
---------------------
1, 10
2, 1
3, 2
4, 20
5, 3
Я бы хотел, чтобы выходные данные поднимались вверх по иерархии и сообщали мне о каждой категории, к которой относится продукт. Таким образом, желаемый результат будет выглядеть примерно так:
ProductId, CategoryId
---------------------
1, 0
2, 0
3, 0
4, 0
5, 0
1, 1
2, 1
3, 2
4, 2
5, 3
1, 10
4, 20
Есть ли простой способ сделать это в SQL Server 2005?