Я держу товарные категории с парентидной логикой.Мне нужно, чтобы все продукты были отнесены к категории, но сверху вниз.Например, у меня есть эти таблицы:
ProductCategories
id CategoryID ProductID
1 4 1
2 5 2
3 6 3
4 8 4
5 8 5
6 9 5
7 9 2
Категории
ID CategoryName ParentID
1 Kids NULL
2 Accesories 1
3 Shoes 2
4 Flat Shoes 3
5 Leather Sandals 4
6 Sneakers 3
7 Clothing 1
8 T-Shirts 7
9 Bestsellers 1
Продукты
ID ProductName
1 White Espadrilles
2 Tan Leather Sandals
3 Beige Sneakers
4 Linen T-Shirt
5 Cotton T-Shirt
Я использую ниже Sql рекурсивный запрос:
with CTE as
(
select c.ID,c.ParentID,c.CategoryName,p.ProductName
from Categories c
join ProductCategories pc
on pc.CategoryID=c.ID
join Products p
on pc.ProductID=p.ID
where c.ID = 5 --start id
union all
select ce.ID,ce.ParentID,ce.CategoryName,p.ProductName
from Categories ce
join ProductCategories pc
on pc.CategoryID=ce.ID
join Products p
on pc.ProductID=p.ID
join CTE
on ce.ID=CTE.ParentID
)
select * from CTE
Приведенный выше запрос возвращает приведенный ниже результат для данного CategoryID = 5:
ID ParentID CategoryName ProductName
5 4 Leather Sandals Tan Leather Sandals
4 3 Flat Shoes White Espadrilles
, если categoryID = 1 или 2, никаких записей не происходит.
У меня нетпродукт напрямую для категории Аксесуары, но я имею в виду его дочерние категории, поэтому я должен получить все продукты под этим, сверху вниз.
Как я могу это сделать?