Я хочу вернуть все продукты из таблицы Product на основе любой категории в иерархии.SQL-рекурсивный результат для поиска всех продуктов в иерархии категорий
Например, вы можете искать товары у всех «Фордов» (категория = 1), и это вернет два результата.
Прямо сейчас этот рекурсивный результат возвращает продукты только в том случае, если в таблице продуктов есть точное соответствие таблице CategoryHierarchy. Так что это работает, если я скажу, что категория = 4.
В таблице продуктов у меня два Ford Mustang. Только цена и описание отличаются (не показаны здесь), но их классификация одинакова с точки зрения категорий продуктов.
[Product Table]
[ProductId] [ProductName] [CategoryId]
1 Ford Mustang 1 4
2 Ford Mustang 2 4
3 Buick Regal 3 12
Каждый Ford Mustang имеет иерархию категорий, которая идет 1,2,3,4. Те же два результата должны отображаться, если lowestcategory параметр Sql является 1 или 2 или 3 или 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
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
Не повезло. Не возвращает никаких результатов для lowercategoryid = 1/2/или 3. – User970008
Упс ... У меня был Id и ParentId в рекурсивной части cte. Попробуй. –
Вы победитель. Ура! Спасибо! – User970008