63、图与递归查询:物化路径解决方案详解

图与递归查询:物化路径解决方案详解

1. 循环路径检测与修复

在处理员工数据时,可能会出现循环路径的问题。例如,在输出中第二次访问到员工 1 时,检测到了循环路径 .1.3.7.9.14.1. 。为了找出循环路径,可使用以下代码:

DECLARE @root AS INT = 1; 

WITH Subs AS 
( 
  SELECT empid, empname, 0 AS lvl, 
    CAST('.' + CAST(empid AS VARCHAR(10)) + '.' AS VARCHAR(MAX)) AS path, 
    -- 显然根节点没有循环 
    0 AS cycle 
  FROM dbo.Employees 
  WHERE empid = @root 

  UNION ALL 

  SELECT C.empid, C.empname, P.lvl + 1, 
    CAST(P.path + CAST(C.empid AS VARCHAR(10)) + '.' AS VARCHAR(MAX)), 
    -- 如果父节点的路径包含子节点的 ID,则检测到循环 
    CASE WHEN P.path LIKE '%.' + CAST(C.empid AS VARCHAR(10)) + '.%' THEN 1 ELSE 0 END 
  FROM Subs AS P 
    INNER JOIN dbo.Employees AS C 
      ON C.mgrid = P.empid 
         AND P.cycle = 0 
) 
SELECT pa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值