2

给定一个表中的记录在同一个表中有父级,并且这些父级有自己的父级,如果不同的记录可以有不同数量的父级,那么什么查询会得到我请求记录的所有父级的记录。

示例:我有记录 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
4

1 回答 1

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
于 2012-04-28T22:58:18.527 回答