这是我拥有的表格的简单外观
类别
- 类别 ID
- 分类名称
- 父类别 ID
如您所见,目录表是一个自引用表,因此可以从 0 开始递归它,这是假的“根”类别(也可以为空,但不是)。
样本数据:
1, Apples, 0
5, Yummy, 1
10, Really Yummy, 5
15, Yucky, 0
18, Some Sub Cat, 15
20, Some Deep Sub Cat, 18
25, Some Deep Sub Cat 2, 18
最深的任何类别层次结构可以是 4 深,我正在尝试获得如下所示的输出:
CatId, [up to 4 deep of category names on the hierarchy in separate columns, or null if none]
1, Apples, NULL, NULL, NULL
5, Apples, Yummy, NULL, NULL
10, Apples, Yummy, Really Yummy, NULL
15, Apples, Yucky, NULL, NULL
18, Apples, Yucky, Some Sub Cat, NULL
20, Apples, Yucky, Some Sub Cat, Some Deep Sub Cat
25, Apples, Yucky, Some Sub Cat, Some Deep Sub Cat 2
此 SQL 很接近,但它向后生成它,左对齐
select c1.categoryid, c1.name, c2.name, c3.name, c4.name
from category c1
left outer join category c2
on c1.parentcategoryid = c2.categoryid
left outer join category c3
on c2.parentcategoryid = c3.categoryid
left outer join category c4
on c3.parentcategoryid = c4.categoryid
任何 SQL 天才都有一些好主意吗?