我的软件使用树数据结构,并将其存储在SQL中。我使用名为邻接列表的抽象,其中包含存储ID
和ParentID
的每一行。
ID
是主键,ParentID
是同一个表中的外键。
我想"转换"我的SQL抽象为 Path Enumeration 。它由存储ID
的每一行和存储从根到当前行的ID路径的varchar
字段组成。例如,此树中Path
行的ID = 6
字段:
将是/1/2/4/6/
。更多详细信息here,名称为 Lineage Column 。
如何从仅包含Path
和ID
的现有数据库构建列ParentID
?
答案 0 :(得分:1)
SQL Server 2005以后应该支持以下内容:
WITH
recursed_tree AS
(
SELECT
IDObject,
concat('/', cast(IDObject as varchar(100))) AS Path
FROM
tbObject
WHERE
ParentID IS NULL
UNION ALL
SELECT
next.IDObject,
concat(prev.Path, '/', cast(next.IDObject as varchar(100))) AS Path
FROM
recursed_tree AS prev
INNER JOIN
tbObject AS next
ON prev.IDObject = next.ParentID
)
SELECT
*
FROM
recursed_tree
答案 1 :(得分:0)
我想出了这个SQL Server查询:
[tbObjectHierarchy
有一个名为IDObject
的FK和PK以及一个名为varchar
的{{1}}
Path