2012-06-22 6 views
2

재귀 CTE로 계층 구조를 생성 할 수 있지만 항상 앵커를 사용했습니다 ... 최상위 수준 표시기 (parentID가 NULL 임)가있는 최상위 레코드 . 반드시 앵커가 정의되지 않은 계층 구조를 만들고 싶습니다. 나는 parentID와 childID를 가진 many to many 레퍼런스 테이블을 가지고있다. 모든 부모는 자식이 될 수 있으며 그 반대도 마찬가지입니다 (물론 순환 참조는 피함). 나는 이것이 하향식에 반대되는 상향식 접근 방식 일 것이라고 생각한다. 생각?SQL 서버 : 앵커가없는 계층 형 순환 CTE

+0

지금까지 가지고있는 샘플을보고 싶습니다. 어쩌면 구조의 예가 사용되고 현재 시도 중입니다. 여기 사람들과 함께 놀 수있는 예제를 추가하는 [좋은 장소] (http://sqlfiddle.com/#!3/8ecfd/13)가 있습니다. – whytheq

+0

재귀 CTE를 사용하려고하면 영구적으로 실행됩니다. 음, MAXRECURSION이 다른 값으로 설정된다는 점만 제외하면. 이미 방문한 노드를 추적하는 그래프 워킹 알고리즘이 필요하다고 생각합니다. CTE를 사용하여 그런 짐승을 어떻게 구현할 지 모르겠습니다. –

+0

하나의 childiID로 작업하고 childID를 제공하는 경우이 쿼리는 최소한 상향식 계층 구조를 작성합니다. c는 ( ) lvl, a.parentid, a.childid로 0을 선택합니다. dbo.ParentChild a에서 여기서 childid = 1 모든 선택 LVL + 1 b.parentid은 * LVL 의해 C에서 순서를 구별 선택 ) c.parentid = C b.childid에 가입 b를 dbo.ParentChild에서 을 b.childid 연합 parentid , 어린 아이. –

답변

3

최소한 하나의 앵커 멤버와 하나의 재귀 멤버가 없어도 CTE를 사용하여 재귀 쿼리를 작성할 수 없습니다.

재귀 CTE를 사용하여 계층을 생성하는 경우이 경우 테이블의 데이터는 계층 구조를 나타내지 않으므로 계층 구조는 유추 된 비순환 그래프의 한 유형이므로 하나의 요소 (계층 구조)는 다른 모든 요소보다 우월합니다.