你真的会玩SQL吗?查询指定节点及其所有父节点的方法
你真的会玩SQL吗?系列文章
- 你真的会玩SQL吗?之逻辑查询处理阶段
- 你真的会玩SQL吗?和平大使 内连接、外连接
- 你真的会玩SQL吗?三范式、数据完整性
- 你真的会玩SQL吗?查询指定节点及其所有父节点的方法
- 你真的会玩SQL吗?让人晕头转向的三值逻辑
- 你真的会玩SQL吗?EXISTS和IN之间的区别
- 你真的会玩SQL吗?无处不在的子查询
- 你真的会玩SQL吗?Case也疯狂
- 你真的会玩SQL吗?表表达式,排名函数
- 你真的会玩SQL吗?简单的数据修改
- 你真的会玩SQL吗?你所不知道的 数据聚合
- 你真的会玩SQL吗?透视转换的艺术
- 你真的会玩SQL吗?冷落的Top和Apply
- 你真的会玩SQL吗?实用函数方法汇总
- 你真的会玩SQL吗?玩爆你的数据报表之存储过程编写(上)
- 你真的会玩SQL吗?玩爆你的数据报表之存储过程编写(下)
--查询ID = '009'的所有父节点 SET @ID = '009' ;WITH T AS ( SELECT ID , PID , NAME FROM TB WHERE ID = @ID UNION ALL SELECT A.ID , A.PID , A.NAME FROM TB AS A JOIN T AS B ON A.ID = B.PID ) SELECT * FROM T ORDER BY ID /* ID PID NAME ---- ---- ---------- 001 NULL 广东省 003 001 深圳市 007 003 宝安区 009 007 龙华镇
create table tb(id varchar(3) , pid varchar(3) , name varchar(10)) insert into tb values('001' , null , '广东省') insert into tb values('002' , '001' , '广州市') insert into tb values('003' , '001' , '深圳市') insert into tb values('004' , '002' , '天河区') insert into tb values('005' , '003' , '罗湖区') insert into tb values('006' , '003' , '福田区') insert into tb values('007' , '003' , '宝安区') insert into tb values('008' , '007' , '西乡镇') insert into tb values('009' , '007' , '龙华镇') insert into tb values('010' , '007' , '松岗镇') go --查询各节点的父路径函数(从父到子) create function f_pid1(@id varchar(3)) returns varchar(100) as begin declare @re_str as varchar(100) set @re_str = '' select @re_str = name from tb where id = @id while exists (select 1 from tb where id = @id and pid is not null) begin select @id = b.id , @re_str = b.name + ',' + @re_str from tb a , tb b where a.id = @id and a.pid = b.id end return @re_str end go --查询各节点的父路径函数(从子到父) create function f_pid2(@id varchar(3)) returns varchar(100) as begin declare @re_str as varchar(100) set @re_str = '' select @re_str = name from tb where id = @id while exists (select 1 from tb where id = @id and pid is not null) begin select @id = b.id , @re_str = @re_str + ',' + b.name from tb a , tb b where a.id = @id and a.pid = b.id end return @re_str end go select * , dbo.f_pid1(id) [路径(从父到子)] , dbo.f_pid2(id) [路径(从子到父)] from tb order by id drop function f_pid1 , f_pid2 drop table tb /* id pid name 路径(从父到子) 路径(从子到父) ---- ---- ------ --------------------------- ---------------------------- 001 NULL 广东省 广东省 广东省 002 001 广州市 广东省,广州市 广州市,广东省 003 001 深圳市 广东省,深圳市 深圳市,广东省 004 002 天河区 广东省,广州市,天河区 天河区,广州市,广东省 005 003 罗湖区 广东省,深圳市,罗湖区 罗湖区,深圳市,广东省 006 003 福田区 广东省,深圳市,福田区 福田区,深圳市,广东省 007 003 宝安区 广东省,深圳市,宝安区 宝安区,深圳市,广东省 008 007 西乡镇 广东省,深圳市,宝安区,西乡镇 西乡镇,宝安区,深圳市,广东省 009 007 龙华镇 广东省,深圳市,宝安区,龙华镇 龙华镇,宝安区,深圳市,广东省 010 007 松岗镇 广东省,深圳市,宝安区,松岗镇 松岗镇,宝安区,深圳市,广东省 (所影响的行数为 10 行) */
作者:欢醉
公众号【一个码农的日常】 技术群:319931204 1号群: 437802986 2号群: 340250479
出处:http://zhangs1986.cnblogs.com/
码云:https://gitee.com/huanzui
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
原文地址:http://www.cnblogs.com/zhangs1986/p/4076878.html
相关推荐
-
MySQL数据库查询所有表名 服务器
2019-7-28
-
在 Linux 上如何清除内存的 Cache、Buffer 和交换空间 服务器
2019-3-13
-
❖ Linux/Unix 编译安装软件源代码的最佳实践 服务器
2019-10-16
-
怎样在 Linux 中用 Vim 对文件进行密码保护 服务器
2019-3-6
-
使用 guiscrcpy 将你的安卓手机的屏幕投射到你的电脑 服务器
2020-5-25
-
MySQL 数据库设计总结 服务器
2019-8-22
-
HBase读写优化N条实用技巧 服务器
2020-6-13
-
一款综合(QQ 音乐、微信、美团、优酷、虎牙直播等多款 app)风格的搜索控制器 服务器
2020-6-13
-
[勾勒一个自己的搜索引擎]ES3索引映射 服务器
2020-5-31
-
给本子安装manjaro 出现无法关机的解决办法 服务器
2019-10-16