0

これが私が持っているテーブルの簡単な見方です

カテゴリー

  • 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の天才は良いアイデアを持っていますか?

4

1 に答える 1

1
select c1.CategoryId as id,
       c1.CategoryName as n1,
       c2.CategoryName as n2,
       c3.CategoryName as n3,
       c4.CategoryName as n4
from            Category c1
left outer join Category c2 on c2.ParentCategoryId = c1.CategoryId
left outer join Category c3 on c3.ParentCategoryId = c2.CategoryId
left outer join Category c4 on c4.ParentCategoryId = c3.CategoryId
where c1.parentcategoryid = 0;

(あなたの編集によると: ParentCategoryId と CategoryID が結合で反転されました。)

于 2009-07-21T22:07:18.280 に答える