2012-04-28 90 views
2

如果给定表中的记录具有同一表中的父母,并且这些父母拥有自己的父母,那么如果不同记录可以具有不同的数目父母。用于嵌套记录的SQL查询

示例:我有记录4的id,并且想要获取所有父记录(1,2,3)。当然,我可以得到记录4,看看谁是父母,然后获得记录3,看看父母是谁,然后获得记录2,直到我得到的记录没有父母,但有没有一个查询可以让我获得所有的记录记录?

Example Table: 
ID | Type | Parent ID 
---------------------------- 
1 |Master| 
2 |Sub 1 | 1 
3 |Sub 2 | 2 
4 |Sub 3 | 3 
5 |Master| 
6 |Sub 1 | 5 
+0

我无法获得该查询为我工作,我得到NULL。有人可以用这个例子重写吗? – pmm 2012-04-28 20:38:01

回答

1

如果您假定固定的最大深度级别,则可以表示层次结构。例如,在这个示例中,我假设不超过四个深度级别。如果没有用于递归评估的公用表表达式,除此类解决方案或使用变量外,没有单个查询方法。

Select T1.Id, T1.Type 
    , Concat(Coalesce(Concat(Cast(T4.Id As char(10)),','),'') 
     , Coalesce(Concat(Cast(T3.Id As char(10)),','),'') 
     , Coalesce(Concat(Cast(T2.Id As char(10)),','),'')) 
     As Hierarchy 
From ExampleTable As T1 
    Left Join ExampleTable As T2 
     On T2.Id = T1.ParentId 
    Left Join ExampleTable As T3 
     On T3.Id = T2.ParentId 
    Left Join ExampleTable As T4 
     On T4.Id = T3.ParentId