with 关键字实现递归查询

 

通常用来实现树形结构

首先来看一下表数据

 

 以下代码是递归查询北京市的树结构

WITH org AS (
 SELECT Code, name, parentCode, 1 AS level
 FROM TestCity 
WHERE code = '01'
 UNION ALL
 SELECT t1.Code, t1.name, t1.parentCode, t2.level + 1 AS level
 FROM TestCity t1 INNER JOIN org t2
   ON t1.parentCode = t2.Code
)
SELECT
*
FROM org

  

 

注意:如果要在with表达式中计算,需要保证两边的type一致,如

 

WITH org AS (
 SELECT Code, name, parentCode, 1 AS level, tname = CAST('' as nvarchar(20))
 FROM TestCity 
WHERE code = '01'
 UNION ALL
 SELECT t1.Code, t1.name, t1.parentCode, t2.level + 1 AS level, tanme = CAST(N'|--' + t2.tname as nvarchar(20))
 FROM TestCity t1 INNER JOIN org t2
   ON t1.parentCode = t2.Code
)
SELECT code ,parentCode, tname + name  as name 
FROM org

  

再比较以下两段从StackOverFolw中摘来的代码

--报错 Types don't match between the anchor and the recursive part in column "nm" of recursive query "cte".
WITH cte AS (
  SELECT 
    1 as rn, 
    'name1' as nm
  UNION ALL
  SELECT 
    rn + 1,
    nm = 'name' + CAST((rn + 1) as varchar(255))
  FROM cte a WHERE rn < 10)
SELECT * 
FROM cte

--正解
with cte as
(
select  1 as rn, 
        CAST('name1' AS VARCHAR(255)) as nm
union all
select  rn+1,
        nm = CAST('name' + CAST((rn+1) as varchar(255)) AS VARCHAR(255))
from cte a where rn<10)
select * from cte

  

转载于:https://www.cnblogs.com/guangmangchen/p/6688883.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值