【问题标题】:How to create a hierarchy structure in SQL database?如何在 SQL 数据库中创建层次结构?
【发布时间】:2020-12-01 21:18:27
【问题描述】:

我有一个包含以下列的表格:

我需要根据级别数和层次结构创建更多列。

例如:

Level 1
Architecture ->Level 2
             ->Asses Inventory ->level 3
                              ->Program

如果最多三个级别,我需要创建三列。我在 PowerBI 中实现了这一点。

如何在 SQL 中实现相同的功能? 任何帮助表示赞赏。谢谢

【问题讨论】:

  • 有什么理由同时标记了 MySQL 和 SQL Server?
  • 你试过什么?你在哪里卡住了?向我们展示你的尝试。
  • 如果没有更高级别,ParentId 应该是 null
  • 有多种方法可以解决这个问题。选择哪一个在很大程度上取决于您使用的 DBMS,以及树的性质(如果它很少更改,但经常遍历,或者相反,您希望如何遍历树,树有多少条目,对孩子进行排序,……)如果没有这些信息,就不可能给出有意义的答案。

标签: mysql sql sql-server


【解决方案1】:

在 T-SQL 中,我只是将表多次加入到自身中

按照你的意愿创建一个新表,然后像这样:

   INSERT INTO NEW_TABLE
(LEVEL1, LEVEL2, LEVEL3)
SELECT
a.name,
b.name,
c.name
FROM TABLE1 a
LEFT OUTER JOIN TABLE1 b
ON a.category_id = b.parent_id
LEFT OUTER JOIN TABLE1 c
on b.category_id = c.parent_id
GO

那应该按照我的想法去做。

【讨论】:

  • 除了多余的GO,这将适用于任何数据库。
【解决方案2】:

您可以使用hierarchyid 类型。它带有很多方法来处理层次结构本身,例如:

  • 获取祖先
  • GetDescendant
  • 获取级别
  • GetRoot
  • IsDescendantOf

在你的例子中,你会有这样的东西:

ID      Name
/1/     Architecture
/1/1/   Asses Invenctory
/1/2/   Process2
/2/     Assset Management 

【讨论】:

    猜你喜欢
    • 2013-08-08
    • 2023-03-09
    • 2011-08-27
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多