これが私が持っているテーブルの簡単な見方です
カテゴリー
- CategoryId
- 種別名
- ParentCategoryId
ご覧のとおり、カタログテーブルは自己参照テーブルであるため、偽の「ルート」カテゴリである0から開始することで再帰することができます(nullになることもありますが、そうではありません)。
サンプルデータ:
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の天才は良いアイデアを持っていますか?