嵌套记录的SQL查询

时间:2012-04-28 20:23:34

标签: mysql 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

1 个答案:

答案 0 :(得分: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