首页 / 问答 / SQL Server数据库如何使用SQL语句(CTE/递归)查询一个菜单树形结构的完整路径或者名称呢?

SQL Server数据库如何使用SQL语句(CTE/递归)查询一个菜单树形结构的完整路径或者名称呢?

0

在SQL Server数据库中,当前有一个菜单树形结构的数据表(可能包含无限子级),现需要使用SQL语句实现查询每条记录的完整路径或者名称和层级深度,应该如何实现呢?

数据表结构和示例数据类似如下:

id name parentId
1 Dep 1 0
2 Dep 2 1
3 Dep 3 0
4 Dep 4 1
5 Dep 5 4
6 Dep 6 2

期望的结果为:

parentId id name Level Path
0 1 Dep 1 0 1
1 2 Dep 2 1 1.1
2 6 Dep 6 2 1.1.1
1 4 Dep 4 1 1.2
4 5 Dep 5 2 1.2.1
0 3 Dep 3 0 2

或者

ID FullPath Level
1 Dep 1 0
2 Dep 1\Dep 2 1
3 Dep 3 0
4 Dep 1\Dep 4 1
5 Dep 1\Dep 4\Dep 5 2
6 Dep 1\Dep 2\Dep 6 2
回复 [×]
提交评论
请输入评论内容

3 个回答

  • 0

    在SQL Server数据库(SQL Server 2005+)中,可以CTE配合ROW_NUMBER()函数来实现递归查询,以解决问题,示例SQL脚本如下:

    运行结果如下:

    parentId id name Level Path FullPath
    0 1 Dep 1 0 1 001
    1 2 Dep 2 1 1.1 001.001
    2 6 Dep 6 2 1.1.1 001.001.001
    1 4 Dep 4 1 1.2 001.002
    4 5 Dep 5 2 1.2.1 001.002.001
    0 3 Dep 3 0 2 002
    Rector的个人主页

    Rector

    03-16 回答

    • 0

      如果要列出每行数据的完整名称,则可以使用如下的SQL语句:

      运行结果如下:

      ID FullPath Level
      1 Dep 1 0
      2 Dep 1\Dep 2 1
      3 Dep 3 0
      4 Dep 1\Dep 4 1
      5 Dep 1\Dep 4\Dep 5 2
      6 Dep 1\Dep 2\Dep 6 2
      Rector的个人主页

      Rector

      03-16 回答

      • 0

        运行结果如图:

        Rector的个人主页

        Rector

        03-17 回答

        我来回答