階層内の任意のカテゴリに基づいて、Productテーブルからすべての製品を返したい。
たとえば、すべての「フォード」(カテゴリ= 1)で商品を検索すると、2つの結果が返されます。
現在、この再帰的な結果は、productテーブルとCategoryHierarchyテーブルが完全に一致する場合にのみ製品を返します。したがって、category=4と言えば機能します。
製品表には、2つのフォードマスタングがあります。価格と説明のみが異なりますが(ここには表示されていません)、製品カテゴリに関しては分類は同じです。
[Product Table]
[ProductId] [ProductName] [CategoryId]
1 Ford Mustang 1 4
2 Ford Mustang 2 4
3 Buick Regal 3 12
各フォードマスタングには、1、2、3、4のCategoryHierarchyがあります。Sqlパラメーターのlowestcategoryが1OR2 OR 3 OR 4の場合、これらの同じ2つの結果が表示されます。現時点では、=4の場合にのみ機能します。
[CategoryHierarchy]
[Id] [parentId] [categoryName]
1 0 Ford
2 1 Mustang
3 2 2010
4 3 Blue
10 0 Buick
11 10 Regal
12 11 1999
MS SQL 2008:
declare @lowestcategoryid int;
set @lowestcategoryid = 4;--returns the products but I need it to work if this var = 1,2,3 too
--recursive loop
with RecursiveResult( id, CategoryName, ProductName, parentId) as
(
select ch.Id, ch.categoryname, p.productname, ch.parentId
from CategoryHierarchy ch
join product p on p.categoryId = ch.id
where ch.id = @lowestcategoryid
UNION ALL
select p.categoryId, ch.categoryName, p.productname, ch.parentId
from product p
join CategoryHierarchy ch on p.categoryId = ch.id
join RecursiveResult r on ch.parentId = r.Id
)
select * from recursiveresult