SQL:递归路径

Chr*_*ris 3 sql tree

是否可以在SQL中创建"树解析器"?

我有一张桌子:

ID Name Parent
1  a
2  b    1
3  c    1
4  d    3
Run Code Online (Sandbox Code Playgroud)

现在我想要一个返回的SQL查询:

ID   PATH
1    /a
2    /a/b
3    /a/c
4    /a/c/d
Run Code Online (Sandbox Code Playgroud)

这可能与SQL有关吗?它会让我更容易.真的很感激任何帮助!

Tro*_*roy 5

在SQL Server 2005及更高版本中使用CTE,这是我必须执行此操作的片段:

WITH Paths([Level], [FullPath], [ID]) AS 
(
    SELECT 
        0 AS [Level], 
        Name AS FullPath, 
        ID
    FROM dbo.Entity
    WHERE (ParentEntityID IS NULL)

    UNION ALL

    SELECT 
        p.[Level] + 1 AS [Level], 
        CASE RIGHT(p.[FullPath], 1) 
        WHEN '\' THEN p.[FullPath] + c.[Name] 
        ELSE p.[FullPath] + '\' + c.[Name] 
    END AS FullPath, 
    c.ID
    FROM dbo.Entity AS c 
    INNER JOIN Paths AS p ON p.ID = c.ParentEntityID
)
SELECT [FullPath], [ID]
FROM Paths
Run Code Online (Sandbox Code Playgroud)


Red*_*ter 1

根据所使用的数据库服务器,可能已经为您提供了此功能。否则,您可以创建一个调用自身的函数来返回此信息,或实现物化路径解决方案。

更新:

对于 DB2,您可以使用递归公用表表达式