SQL 递归树 子父节点相互查询
- if object_id('[tb]') is not null drop table [tb]
- go
- create table [tb]([modeid] int,modename varchar(20),parentid int)
- insert [tb]
- select 100 ,'商品管理', 0 union all
- select 101 ,'定单管理', 0 union all
- select 102 ,'用户管理', 0 union all
- select 104 ,'学院广告', 0 union all
- select 105 ,'系统设置', 0 union all
- select 106 ,'附件管理', 0 union all
- select 107 ,'商品管理', 100 union all
- select 108 ,'明细管理', 100 union all
- select 109 ,'物流管理', 100 union all
- select 110 ,'商品信息管理', 107 union all
- select 111 ,'商品分类管理', 107 union all
- select 112 ,'回收站管理', 107 union all
- select 114 ,'团购管理', 108 union all
- select 115 ,'拍卖管理', 108 union all
- select 116 ,'优惠管理', 108 union all
- select 117 ,'会员管理', 102 union all
- select 118 ,'会员卡管理', 102 union all
- select 119 ,'资金管理', 102 union all
- select 120 ,'管理员管理', 102 union all
- select 121 ,'添加管理员', 120 union all
- select 122 ,'修改管理员', 120
- go
- --查所有子结点
- if object_id('f_getC') is not null drop function f_getC
- go
- create function f_getC(@id int)
- returns @re table(id int,level int,sort varchar(10))
- as
- begin
- declare @l int
- set @l=0
- insert @re select @id,@l,null
- while @@rowcount>0
- begin
- set @l=@l+1
- insert @re select a.modeid,@l,ltrim(isnull(b.sort,a.modeid)) from tb as a,@re as b
- where b.id=a.parentid and b.level=@l-1
- end
- update @re set level = level -1
- return
- end
- go
- select a.modeid,a.parentid,REPLICATE(' ',b.level) +'┝'+a.modename,b.level,b.sort from tb a,f_getC(0) b
- where a.modeid=b.id
- order by case when b.level<2 then 0 else 1 end,b.sort,b.level
- /*
- modeid parentid sort level
- ----------- ----------- -------------------------------------------------- ---------- -----------
- 100 0 ┝商品管理 100 0
- 107 100 ┝商品管理 100 1
- 108 100 ┝明细管理 100 1
- 109 100 ┝物流管理 100 1
- 101 0 ┝定单管理 101 0
- 102 0 ┝用户管理 102 0
- 117 102 ┝会员管理 102 1
- 118 102 ┝会员卡管理 102 1
- 119 102 ┝资金管理 102 1
- 120 102 ┝管理员管理 102 1
- 104 0 ┝学院广告 104 0
- 105 0 ┝系统设置 105 0
- 106 0 ┝附件管理 106 0
- 110 107 ┝商品信息管理 100 2
- 111 107 ┝商品分类管理 100 2
- 112 107 ┝回收站管理 100 2
- 114 108 ┝团购管理 100 2
- 115 108 ┝拍卖管理 100 2
- 116 108 ┝优惠管理 100 2
- 121 120 ┝添加管理员 102 2
- 122 120 ┝修改管理员 102 2
- (所影响的行数为 21 行)
- */
- --查所有子结点,带路径与排序
- if object_id('f_getC') is not null drop function f_getC
- go
- create function f_getC(@id int)
- returns @re table(id int,level int,sort varchar(100),path varchar(500))
- as
- begin
- declare @l int
- set @l=0
- insert @re
- select [modeid],@l,right('00000'+ltrim(modeid),5),modename
- from tb where parentid=@id
- while @@rowcount>0
- begin
- set @l=@l+1
- insert @re
- select a.modeid,@l,b.sort+right('00000'+ltrim(a.modeid),5),
- b.path+' - '+a.modename
- from tb as a,@re as b
- where b.id=a.parentid and b.level=@l-1
- end
- update @re set level = level
- return
- end
- go
- select a.modeid,a.parentid,REPLICATE(' ',b.level) +'┝'+a.modename,b.level,b.sort ,b.path from tb a,f_getC(0) b
- where a.modeid=b.id
- order by sort
- /*
- modeid parentid level
- ----------- ----------- -------------------- ----------- -------------------- ----------------------------------------
- 100 0 ┝商品管理 0 00100 商品管理
- 107 100 ┝商品管理 1 0010000107 商品管理 - 商品管理
- 110 107 ┝商品信息管理 2 001000010700110 商品管理 - 商品管理 - 商品信息管理
- 111 107 ┝商品分类管理 2 001000010700111 商品管理 - 商品管理 - 商品分类管理
- 112 107 ┝回收站管理 2 001000010700112 商品管理 - 商品管理 - 回收站管理
- 108 100 ┝明细管理 1 0010000108 商品管理 - 明细管理
- 114 108 ┝团购管理 2 001000010800114 商品管理 - 明细管理 - 团购管理
- 115 108 ┝拍卖管理 2 001000010800115 商品管理 - 明细管理 - 拍卖管理
- 116 108 ┝优惠管理 2 001000010800116 商品管理 - 明细管理 - 优惠管理
- 109 100 ┝物流管理 1 0010000109 商品管理 - 物流管理
- 101 0 ┝定单管理 0 00101 定单管理
- 102 0 ┝用户管理 0 00102 用户管理
- 117 102 ┝会员管理 1 0010200117 用户管理 - 会员管理
- 118 102 ┝会员卡管理 1 0010200118 用户管理 - 会员卡管理
- 119 102 ┝资金管理 1 0010200119 用户管理 - 资金管理
- 120 102 ┝管理员管理 1 0010200120 用户管理 - 管理员管理
- 121 120 ┝添加管理员 2 001020012000121 用户管理 - 管理员管理 - 添加管理员
- 122 120 ┝修改管理员 2 001020012000122 用户管理 - 管理员管理 - 修改管理员
- 104 0 ┝学院广告 0 00104 学院广告
- 105 0 ┝系统设置 0 00105 系统设置
- 106 0 ┝附件管理 0 00106 附件管理
- (21 行受影响)
- */
- ----------
SQL 递归树 子父节点相互查询的更多相关文章
- 转载:SQL 递归树 子父节点相互查询
if object_id('[tb]') is not null drop table [tb] go create table [tb]([modeid] int,modename varchar( ...
- sql 递归显示所有父节点
1.我先建两个表 一个表示项目及级别 另一个表示项目最后一级中包含内容.两个表的数据如图 CREATE TABLE [dbo].[yq_Project]( ,) primary key, ) NOT ...
- 基于EasyUi ComBotree树修改 父节点选择问题
本人在使用 Easy UI 期间发现了一个不太适合项目的bug,可能也不算bug把 . 毕竟不同项目背景 取舍不同. 我在做网元树选择的时候 发现当选取父节点后,子节点都会被选择 返回 .但是如 ...
- 使用postgre数据库实现树形结构表的子-父级迭代查询,通过级联菜单简单举例
前言:开发常用的关系型数据库MySQL,mssql,postgre,Oracle,简单的增删改查的SQL语句都与标准SQL兼容,这个不用讲,那么对于迭代查询(不严格的叫法:递归查询)每种数据库都不一样 ...
- JavaScript之递归查找所有父节点
......data: () => ({ // 数据 dt: [{ id: '1', children: [ { id: '1-1', children: [ { id: '1-1-1', ch ...
- SQL根据某一父节点查询所有子节点,无限
;with cte as( select id,ParentCategoryId from Category where id = 17 union all select a.id,a.ParentC ...
- SqlServer-无限递归树状图结构设计和查询
在现实生活中,公司的部门设计会涉及到很多子部门,然后子部门下面又存在子部门,形成类似判断的树状结构,比如说评论楼中楼的评论树状图,职位管理的树状图结构等等,实现类似的树状图数据结构是在开发中经常出现的 ...
- 使用layer 弹出对话框 子父页面相互参数传递 父页面获取子页面参数实例
一.先看效果: 1.点击三个点的图标弹出了子页面: 2.子页面调用父页面方法,图一调用父页面方法,图二得到父页面var变量. 3.选择之后,关闭弹框,父页面得到子页面单选框选择的v ...
- iframe子父窗口相互操作方法或元素
一.jquery 父.子页面之间页面元素的获取,方法的调用: 1. 父页面获取子页面元素: 格式:$("#iframe的ID").contents().find("#if ...
随机推荐
- autolayout sizeclass 资料集锦
http://www.raywenderlich.com/20881/beginning-auto-layout-part-1-of-2 Core Animation Programming Guid ...
- Oracle----SQL语句积累 (Oracle 导入 dmp文件)
Oracle----SQL语句积累 (Oracle 导入 dmp文件) Oracle SQL PL 导入dum文件 1.数据库DBA权限: 注意:这个是在cmd命令行中直接输入,不需要进入Oracl ...
- Nginx配置指定媒体类型文件强制下载
由于业务需要,在点击显示链接(如www.xxx.com/2015-01-15/xxx.png)显示媒体资源(如图片.视频.音频.文档),而在点击下载链接(如www.xxx.com/2015-01-15 ...
- c# DllImport 找不到指定模块
两年前的一个项目,基于身份证阅读器的开发,之前都是在公司电脑上开发维护等,今天有需要用到自己的笔记本,只有vs2008和mysql5.5,以为足够,兴致勃勃的拿到客户那里现场解决问题,F5运行程序,程 ...
- winform客户端利用webClient实现与Web服务端的数据传输
由于项目需要,最近研究了下WebClient的数据传输.关于WebClient介绍网上有很多详细介绍,大概就是利用WebClient可以实现对Internet资源的访问.无外乎客户端发送请求,服务端处 ...
- ubuntu samba 服务器设置
安装 SAMBA 组件 sudo apt-get install samba smbfs smbclient ubuntu 14.04 使用以下方式安装: ? 1 2 3 4 5 6 7 若之前有安装 ...
- centos安装与卸载postgresql
1.卸载旧版本postgresql $ yum remove postgresql* 2.更新yum $ yum update 3.下载pgdg-centos92-9.2-6.noarch.rpm,或 ...
- Pixel VS Point, FrameBuffer VS RenderBuffer
// How iOS app MVC works View, Window, AppDelegate ViewController, RootViewController // On Pixel VS ...
- Eclipse下maven使用嵌入式(Embedded)Neo4j创建Hello World项目
Eclipse下maven使用嵌入式(Embedded)Neo4j创建Hello World项目 新建一个maven工程,这里不赘述如何新建maven工程. 添加Neo4j jar到你的工程 有两种方 ...
- Hive自定义函数的学习笔记(1)
前言: hive本身提供了丰富的函数集, 有普通函数(求平方sqrt), 聚合函数(求和sum), 以及表生成函数(explode, json_tuple)等等. 但不是所有的业务需求都能涉及和覆盖到 ...