SQL Server with as 递归查询

本文介绍了一个菜单表的数据结构,并提供了两个具体的SQL查询案例。第一个案例展示了如何查询指定ID下的所有子项;第二个案例则说明了如何查找指定ID项的上级菜单。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一)菜单表[A03_MENU]结构如下:

CREATE TABLE [dbo].[A03_MENU](

[id] [INT] NOT NULL,
[name] [NVARCHAR](128) NOT NULL,
[sort] [INT] NOT NULL,
[pid] [INT] NOT NULL

) ON [PRIMARY]

sort列即每一节按sort值排序。

数据结构如图所示


(二)如果查询节点id=1 即语文下的课程则SQL语句如下:

WITH    cte
          AS ( SELECT   *
               FROM     dbo.T_Menu
               WHERE    id = '1'
               UNION ALL
               SELECT   T_Menu.*
               FROM     dbo.T_Menu ,
                        cte
               WHERE    T_Menu.pid = cte.id  
             )
    SELECT  *
    FROM    cte
    ORDER BY id,sort

结果如下:



(三)如果查询节点id=8的上级,SQL语句如下:

WITH    cte
          AS ( SELECT   *
               FROM     dbo.T_Menu
               WHERE    id = '8'
               UNION ALL
               SELECT   T_Menu.*
               FROM     dbo.T_Menu ,
                        cte
               WHERE    T_Menu.id = cte.pid  
               AND T_Menu.id <> cte.id  
             )
    SELECT  *
    FROM    cte
    ORDER BY id,sort
  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值