鉴于表中的记录在同一个表中有父母,并且这些父母有自己的父母,如果不同的记录可以有不同数量的父母,那么查询将为我提供所请求记录的所有父母的记录。
示例:我有记录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 :(得分: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