2012-05-22 1 views
3

"리프 노드 만"인 레코드 만 쿼리하는 방법은 무엇입니까? (즉, 자식이 없음)?hierarchyid를 사용하여 모든 리프 노드 레코드 찾기

나는 다음과 같은 쿼리를 시도 :

select * 
from TableA tt 
where tt.HierarchyId.GetDescendant(null, null) not in 
(
    Select t.HierarchyId 
    from TableA t 
) 

그러나 이것은 여전히 ​​아이들이 있던 일부 노드를 반환하는 것 같았다.

나는

+0

나는 내가 전에이 쿼리를 봤다 실패 어디 시나리오를 발견 한 새로운 내장 HIERARCHYID 데이터 유형 (밀리 SQLSERVER의 일부)를 사용하고 있습니다. [this answer] (http://stackoverflow.com/a/8562690/569436)을보십시오. BTW, 내가 제공 한 새로운 대답은 @AaronBertrand의 대답과 거의 같습니다. –

답변

6
SELECT A.HieracrchyId, A.HierarchyId.ToString() 
    FROM dbo.TableA AS A 
    LEFT OUTER JOIN dbo.TableA AS B 
    ON A.HierarchyId = B.HierarchyId.GetAncestor(1) 
    WHERE B.HierarchyId IS NULL;