簡體   English   中英

SQL檢索樹結構查詢

[英]SQL retrieving tree structure query

我有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

例如,從產品表中取出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值,以及如何在其類別中加入產品時,我不確定如何停止加入,並且是否存在不使用大量連接的動態方式?

在這里:

With CTE (CatID, CatName, HigherCatID) AS
(
  SELECT categoryID, CAST(catagoryName AS VARCHAR(1000)), highercategoryID
  FROM CATEGORIES
  UNION ALL
  SELECT C.categoryID, CAST(CTE.CatName + ' > ' + C.catagoryName AS VARCHAR(1000)), CTE.HigherCatID
  FROM CATEGORIES C
  INNER JOIN CTE ON C.HigherCategoryID = CTE.CatID
)
SELECT P.ID, P.ProductName, Cte.CatID, CTE.CatName
FROM CTE INNER JOIN PRODUCTS P
ON (CatID = P.Category)
WHERE CTE.HigherCatID=0 

你有一個SQLFiddle在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM