【问题标题】:How to Create Category Tree Hierarchy with Multiple Levels SQL? [duplicate]如何使用多级 SQL 创建类别树层次结构? [复制]
【发布时间】:2018-01-29 12:05:47
【问题描述】:

我有一个代表类别层次结构的表,层次结构顶部的元素的父 ID 为 0。 CatID 列中有超过 54K 的唯一 ID。每个 ID 都可以是另一个 ID。类别深入 8 个级别。 表格如下:

CatID   ParentID  CatName
1       0         Home
.       .         .
.       .         .
20      1         Vehicles
.       .         .
35      20        SUV
36      20        Motorbikes
.       .         .
90      35        BMW
91      35        Toyota
.       .         .
234     91        Land Cruiser

这是我想要达到的结果:

Cat0   Cat1       Cat2        Cat3    Cat4         Cat5   Cat6   Cat7
Home   Vehicles   SUV         Toyota  LandCruiser
Home   Vehicles   SUV         BMW            
Home   Vehilces   Motorbikes
.      .           .

我该怎么做?我是否需要某种循环来遍历所有 ID?

之前有人问过similar question,所以我使用相同的表结构来解释我的观点,但答案并不完全是我想要的。

有人可以帮忙吗?

【问题讨论】:

  • 类别层次结构总是 8 级或更深?即没有 Cat8,或者您不希望成员比检索到的更深?
  • 嗨@MislavZic!是的,层次结构总是 8 级深。
  • 我相信 John 的答案正是您想要的。

标签: sql sql-server tree categories hierarchy


【解决方案1】:

这里是:

SELECT
    L0.CatName AS Cat0,
    L1.CatName AS Cat1,
    L2.CatName AS Cat2,
    L3.CatName AS Cat3,
    L4.CatName AS Cat4,
    L5.CatName AS Cat5,
    L6.CatName AS Cat6,
    L7.CatName AS Cat7
FROM
    YourTable AS L0
    LEFT JOIN YourTable AS L1
    ON L0.CatID = L1.ParentID
    LEFT JOIN YourTable AS L2
    ON L1.CatID = L2.ParentID
    LEFT JOIN YourTable AS L3
    ON L2.CatID = L3.ParentID
    LEFT JOIN YourTable AS L4
    ON L3.CatID = L4.ParentID
    LEFT JOIN YourTable AS L5
    ON L4.CatID = L5.ParentID
    LEFT JOIN YourTable AS L6
    ON L5.CatID = L6.ParentID
    LEFT JOIN YourTable AS L7
    ON L6.CatID = L7.ParentID
WHERE
    L0.ParentID = 0

【讨论】:

  • 天啊,就这么简单吧? :D 非常感谢@MislavZic!当然像梦一样工作!
  • 我很高兴它有帮助。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-11
  • 2017-04-18
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多