SQL中的CTE应用——递归查询(树)
下面是一张递归表结构
organno name uporganno GrpNo
00000000000000000001 山东淄博交通运输集团有限公司 NULL 00000000000000000001
00000000000000000002 连云港新东方国际货柜码头有限公司 NULL 00000000000000000002
00000000000000000003 河口区供电公司 NULL 00000000000000000003
00000000000000000004 济南鼎隆典当有限公司 NULL 00000000000000000004
比如我们要查询organno = 00000000000000000338,并且uporganno为00000000000000000338的数据怎么办呢?(返回结果如下)
organno name uporganno GrpNo
00000000000000000338 昂立集团 NULL 00000000000000000189
00000000000000000348 昂立北京分公司 00000000000000000338 00000000000000000189
00000000000000000368 昂立集团本部 00000000000000000338 00000000000000000189
00000000000000000349 昂立北分海淀支公司 00000000000000000348 00000000000000000189
00000000000000000350 昂立海淀中关村营业部 00000000000000000349 00000000000000000189
00000000000000000351 昂立北分知春路营业部 00000000000000000349 00000000000000000189
代码(
SELECT organno, name, uporganno,GrpNo
FROM TDOrgan
WHERE organno ='00000000000000000338' --or uporganno='00000000000000000338'
UNION ALL
--select a.organno, a.name, a.uporganno from TDOrgan as a ,cte as b where a.uporganno=b.organno
SELECT tdo.organno, tdo.name, tdo.uporganno,tdo.GrpNo
FROM cte
JOIN TDOrgan AS tdo
ON cte.organno = tdo.uporganno
)
--Uses MAXRECURSION to limit the recursive levels to 2
SELECT *
FROM cte
OPTION (MAXRECURSION 3);
这是从上向下查,
递归查询没有显式的递归终止条件,只有当第二个递归查询返回空结果集或是超出了递归次数的最大限制时才停止递归。是指递归次数上限的方法是使用MAXRECURION。

浙公网安备 33010602011771号