1

私は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 シャツを取得します。

  1. そのカテゴリは 15 です。
  2. カテゴリ テーブルに移動し、categoryID=15 の場所を確認します。
  3. = 0停止の場合はhighercategoryIDを見て、そうでない場合はその値99を取ります
  4. 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 の値が見つかったときに結合を停止する方法と、そのカテゴリで製品を結合する方法がわかりません。多くの結合を使用せずに動的な方法はありますか?

4

1 に答える 1