sql server利用cte递归查询
2024-10-19 02:26:48
- 1.数据环境准备
参考Oracle递归查询文章。
- 2.查询某个节点下的所有子节点
with cte(id,name,parent_id) as
(
select id,name,parent_id from SC_DISTRICT where name='巴中市'
union all
select sd.id,sd.name,sd.parent_id from SC_DISTRICT sd ,cte c where c.id = sd.parent_id )select * from cte result:
id name parent_id
巴中市
巴州区
通江县
平昌县
大寨乡
响滩镇
龙岗镇
白衣镇
- 3.计算层级(类似Oracle的level伪列)
with cte(id,name,parent_id,lev) as
(
select id,name,parent_id, from SC_DISTRICT where name='达州市'
union all
select sd.id,sd.name,sd.parent_id,c.lev+ from SC_DISTRICT sd,cte c where c.id=sd.parent_id
)
select * from cte result:
id name parent_id lev
达州市
通川区
宣汉县
塔河乡
三河乡
胡家镇
南坝镇
- 4.查询路径的根节点(类似Oracle的connect_by_root)
with cte(id,name,parent_id,rootid,rootname) as
(
select id,name,parent_id,id rootid,name rootname from SC_DISTRICT where name='达州市'
union all
select sd.id,sd.name,sd.parent_id,cte.rootid,cte.rootname from SC_DISTRICT sd,cte where sd.parent_id=cte.id
)
select * from cte result:
id name parent_id rootid rootname
达州市 达州市
通川区 达州市
宣汉县 达州市
塔河乡 达州市
三河乡 达州市
胡家镇 达州市
南坝镇 达州市
- 5.查询递归路径(类似Oracle的sys_connect_by_path)
with cte(id,name,pathname) as
(
select id,name,cast(name as nvarchar) from SC_DISTRICT where name='达州市'
union all
select sd.id,sd.name,cast(cte.pathname+'_'+sd.name as nvarchar) from SC_DISTRICT sd,cte where sd.parent_id=cte.id
)
select * from cte with cte(id,name,pathname) as
(
select id,name,convert(nvarchar,name) from SC_DISTRICT where name='达州市'
union all
select sd.id,sd.name,convert(nvarchar,cte.pathname+'_'+sd.name) from SC_DISTRICT sd,cte where sd.parent_id=cte.id
)
select * from cte result:
id name pathname
达州市 达州市
通川区 达州市_通川区
宣汉县 达州市_宣汉县
塔河乡 达州市_宣汉县_塔河乡
三河乡 达州市_宣汉县_三河乡
胡家镇 达州市_宣汉县_胡家镇
南坝镇 达州市_宣汉县_南坝镇
最新文章
- python性能检测工具整理
- Unity3d程序运行的时候在unity3d标志哪里进不去的原因
- 以Access为支撑,书写一个C#写入记录的案例
- android 页面停几秒后跳转
- 在visual studio中使用git版本系统(zz)
- 《C++Primer》复习——with C++11 [1]
- JAVA:23种设计模式详解(转)2
- win32下进程间通信——共享内存
- 转:redis windows下的环境搭建
- atoi()、inet_addr()等函数 time.h文件
- json解析eval()中文乱码问题的解决
- -1-1 java 基础语法 java关键字 java 注释 常量 语句 运算符 函数 数组定义
- java的OSGi确实是个坑
- Pycharm用Ctrl+鼠标滚轮控制字体大小
- Vue之双向数据绑定
- Linux下常用配置文件
- DJI-A2调参详细教程
- [转]NodeBB 环境搭建
- 转:PHPStorm+XDebug进行调试图文教程
- php过滤字段htmlentities,htmlspecialchars,strip_tags
热门文章
- python常见容器属性和方法
- Asynchronous Programming Using Delegates使用委托进行异步编程
- ZOJ 2587 Unique Attack(最小割唯一性判断)
- python assert 断言详细用法格式
- UI 交互
- vnc viewer 点击system 卡死现象
- zentaoPHP框架是做什么的(整理)
- Mysql中FIND_IN_SET和REPLACE函数简介
- 在触发器中,当“IsMouseOver”属性=true时,设置当前控件的高亮选中效果
- 分享6款优秀的 AR/VR 开源库