2012-05-22 23 views
3

我怎麼會去查詢僅僅是「只葉子節點」 (即無子女)記錄找到所有葉子節點記錄?使用HIERARCHYID

我已經嘗試了這樣的查詢:

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

但這似乎仍然返回一些節點是有孩子。

我使用的是內置的hierarchyid數據類型(MS SQLSERVER的一部分)

+0

我新我以前見過這個查詢,我發現一種情況,它失敗。看一看[這個答案](http://stackoverflow.com/a/8562690/569436)。順便說一句,我所提供的新的答案几乎是相同的,通過@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;