我想根据层次结构中的任何类别从 Product 表中返回所有产品。
例如,您可以按所有“福特”(类别 = 1)搜索产品,它会返回两个结果。
现在,只有当产品表中存在与 CategoryHierarchy 表完全匹配的情况下,此递归结果才会返回产品。因此,如果我说类别 = 4,它会起作用。
在产品表中,我有两辆福特野马。只有价格和描述不同(此处未显示),但它们的分类在产品类别方面是相同的。
[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 参数 minimumcategory 为 1 OR 2 OR 3 OR 4,则应该显示相同的两个结果。现在,它仅在它 = 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
微软 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