mysql递归自身连接_SQL Server递归自联接

递归cte救援....

创建并填充样本表(请在将来的问题中保存此步骤):

DECLARE @T as table

(

id int,

name varchar(100),

parent_id int

)

INSERT INTO @T VALUES

(1, 'A', NULL),

(2, 'A.1', 1),

(3, 'A.2', 1),

(4, 'A.1.1', 2),

(5, 'B', NULL),

(6, 'B.1', 5),

(7, 'B.1.1', 6),

(8, 'B.2', 5),

(9, 'A.1.1.1', 4),

(10, 'A.1.1.2', 4)

cte:

;WITH CTE AS

(

SELECT id, name, name as path, parent_id

FROM @T

WHERE parent_id IS NULL

UNION ALL

SELECT t.id, t.name, cast(cte.path +','+ t.name as varchar(100)), t.parent_id

FROM @T t

INNER JOIN CTE ON t.parent_id = CTE.id

)

查询:

SELECT id, name, path

FROM CTE

结果:

id      name        path

1       A           A

5       B           B

6       B.1         B,B.1

8       B.2         B,B.2

7       B.1.1       B,B.1,B.1.1

2       A.1         A,A.1

3       A.2         A,A.2

4       A.1.1       A,A.1,A.1.1

9       A.1.1.1     A,A.1,A.1.1,A.1.1.1

10      A.1.1.2     A,A.1,A.1.1,A.1.1.2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值