계층의 모든 범주를 기반으로 Product 테이블에서 모든 제품을 반환하려고합니다.범주 계층 구조 내의 모든 제품을 찾기위한 SQL 재귀 결과
예를 들어 "Fords"(카테고리 = 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
각 포드 머스탱에는 1,2,3,4가되는 CategoryHierarchy가 있습니다. 이 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 = 경우 SQL 매개 변수의 lowestcategory는 지금 1 또는 2 또는 3 또는 4 인 경우 그 같은 두 가지 결과를 표시해야 만 작동합니다
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
운. lowestcategoryid = 1/2/또는 3에 대한 결과를 반환하지 않습니다. – User970008
죄송합니다 ... ID 및 ParentId가 cte의 재귀 부분을 전환했습니다. 지금 시도해보십시오. –
당신이 승자입니다. 예! 고맙습니다! – User970008