私は2つのテーブルを持っています
Products
テーブル:
ID ProductName Category
0 T-Shirt 15
1 Aqua De Gio 12
2 Jacket 15
3 Hot Water 13
Categories
テーブル:
categoryID catagoryName highercategoryID
8 Fragnance 0
99 Clothing 0
15 Armani Clothing 99
12 Armani Fragnance 8
102 Davidoff Fragnance 8
期待される結果
ID ProductName Category CategoryTree
0 T-Shirt 15 Clothing > Armani Cloting
1 Aqua De Gio 12 Fragnance > Armani Fragnance
2 Jacket 15 Clothing > Armani Cloting
3 Hot Water 13 Fragnance > Davidoff Fragnance
たとえば、products テーブルから T シャツを取得します。
- そのカテゴリは 15 です。
- カテゴリ テーブルに移動し、categoryID=15 の場所を確認します。
- = 0停止の場合はhighercategoryIDを見て、そうでない場合はその値99を取ります
- categoryID 列で 99 を探します。上位のカテゴリは 0 になっているので、停止します。上記に基づいて、「衣料品>アルマーニ衣料品」を取得する必要があります。
私はSQLクエリが初めてで、これが私の最初の試みです
select
x.*,
x.p1 + isnull((' > ' + x.c1), '') + isnull((' > ' + x.c2), '') as CategoryTree
from
(select
RP.categoryid as catid,
RP.catagoryName as p1,
R1.catagoryName as c1,
R2.catagoryName as c2
from
categories as RP
left outer join
categories as R1 on R1.highercategoryid = RP.categoryid
left outer join
categories as R2 on R2.highercategoryid = R1.categoryid
left outer join
categories as R3 on R3.highercategoryid = R2.categoryid
where
RP.highercategoryid != 0 ) x
上位カテゴリに 0 の値が見つかったときに結合を停止する方法と、そのカテゴリで製品を結合する方法がわかりません。多くの結合を使用せずに動的な方法はありますか?