나는 지역 및 하위 영역의 계층 구조 테이블을 가지고 있으며 쉽게 영역과 하위 영역의 트리를 나열해야하지만 또한 각 영역에 대해 하위 영역의 모든 ID를 표시하는 열이 필요합니다. 예를 들어범주/하위 범주 트리 나열 및 하위 열을 같은 행에 표시
는 : 뭔가처럼
id name superiorId
-------------------------------
1 RJ NULL
2 Tijuca 1
3 Leblon 1
4 Gavea 2
5 Humaita 2
6 Barra 4
나는 것으로 결과가 필요 내가했던
id name superiorId sub-regions
-----------------------------------------
1 RJ NULL 2,3,4,5,6
2 Tijuca 1 4,5,6
3 Leblon 1 null
4 Gavea 2 4
5 Humaita 2 null
6 Barra 4 null
그, 을 지역 행의 다도()를 검색하는 기능을 생성하여 예를 들어 한 국가에서 모든 지역을 선택하는 경우 각 지역의 지역 아들을 가져 오는 함수를 실행하기 때문에 쿼리가 실제로 느리게됩니다.
누구나 최적화 된 방법으로이를 얻는 방법을 알고 있습니까?
"행으로 모든 ID를 검색"이라는 기능 :
내가 함수가 쉼표로 구분 된 문자열로 모든 하위 지역의 ID를 반환 것을 의미했다. 기능은 다음과 같습니다
CREATE FUNCTION getSubRegions (@RegionId int)
RETURNS TABLE
AS
RETURN(
select stuff((SELECT CAST(wine_reg.wine_reg_id as varchar)+','
from (select wine_reg_id
, wine_reg_name
, wine_region_superior
from wine_region as t1
where wine_region_superior = @RegionId
or exists
(select *
from wine_region as t2
where wine_reg_id = t1.wine_region_superior
and (
wine_region_superior = @RegionId
)
)) wine_reg
ORDER BY wine_reg.wine_reg_name ASC for XML path('')),1,0,'')as Sons)
GO
이것은 의미가 없습니다. 두 번째 "RJ"가 "TJ"인가? 샘플 출력의 "RJ"에 2에서 6까지의 하위 영역이 있지만 "RJ"까지 연결되는 7, 8 및 9는 포함되지 않는 이유는 무엇입니까? 데이터를 정리하면 도움이 될 수도 있습니다. – mwigdahl
죄송합니다. 편집 할 때 엉망이되었습니다. 고정되어 있습니다 ... –