1. if object_id('[tb]') is not null drop table [tb]
  2. go
  3. create table [tb]([modeid] int,modename varchar(20),parentid int)
  4. insert [tb]
  5. select 100 ,'商品管理', 0 union all
  6. select 101 ,'定单管理', 0 union all
  7. select 102 ,'用户管理', 0 union all
  8. select 104 ,'学院广告', 0 union all
  9. select 105 ,'系统设置', 0 union all
  10. select 106 ,'附件管理', 0 union all
  11. select 107 ,'商品管理', 100 union all
  12. select 108 ,'明细管理', 100 union all
  13. select 109 ,'物流管理', 100 union all
  14. select 110 ,'商品信息管理', 107 union all
  15. select 111 ,'商品分类管理', 107 union all
  16. select 112 ,'回收站管理', 107 union all
  17. select 114 ,'团购管理', 108 union all
  18. select 115 ,'拍卖管理', 108 union all
  19. select 116 ,'优惠管理', 108 union all
  20. select 117 ,'会员管理', 102 union all
  21. select 118 ,'会员卡管理', 102 union all
  22. select 119 ,'资金管理', 102 union all
  23. select 120 ,'管理员管理', 102 union all
  24. select 121 ,'添加管理员', 120 union all
  25. select 122 ,'修改管理员', 120
  26. go
  27.  
  28. --查所有子结点
  29. if object_id('f_getC') is not null drop function f_getC
  30. go
  31. create function f_getC(@id int)
  32. returns @re table(id int,level int,sort varchar(10))
  33. as
  34. begin
  35. declare @l int
  36. set @l=0
  37. insert @re select @id,@l,null
  38. while @@rowcount>0
  39. begin
  40. set @l=@l+1
  41. insert @re select a.modeid,@l,ltrim(isnull(b.sort,a.modeid)) from tb as a,@re as b
  42. where b.id=a.parentid and b.level=@l-1
  43. end
  44. update @re set level = level -1
  45. return
  46. end
  47. go
  48.  
  49. select a.modeid,a.parentid,REPLICATE(' ',b.level) +'┝'+a.modename,b.level,b.sort from tb a,f_getC(0) b
  50. where a.modeid=b.id
  51. order by case when b.level<2 then 0 else 1 end,b.sort,b.level
  52.  
  53. /*
  54. modeid parentid sort level
  55. ----------- ----------- -------------------------------------------------- ---------- -----------
  56. 100 0 ┝商品管理 100 0
  57. 107 100 ┝商品管理 100 1
  58. 108 100 ┝明细管理 100 1
  59. 109 100 ┝物流管理 100 1
  60. 101 0 ┝定单管理 101 0
  61. 102 0 ┝用户管理 102 0
  62. 117 102 ┝会员管理 102 1
  63. 118 102 ┝会员卡管理 102 1
  64. 119 102 ┝资金管理 102 1
  65. 120 102 ┝管理员管理 102 1
  66. 104 0 ┝学院广告 104 0
  67. 105 0 ┝系统设置 105 0
  68. 106 0 ┝附件管理 106 0
  69. 110 107 ┝商品信息管理 100 2
  70. 111 107 ┝商品分类管理 100 2
  71. 112 107 ┝回收站管理 100 2
  72. 114 108 ┝团购管理 100 2
  73. 115 108 ┝拍卖管理 100 2
  74. 116 108 ┝优惠管理 100 2
  75. 121 120 ┝添加管理员 102 2
  76. 122 120 ┝修改管理员 102 2
  77.  
  78. (所影响的行数为 21 行)
  79.  
  80. */
  81.  
  82. --查所有子结点,带路径与排序
  83. if object_id('f_getC') is not null drop function f_getC
  84. go
  85. create function f_getC(@id int)
  86. returns @re table(id int,level int,sort varchar(100),path varchar(500))
  87. as
  88. begin
  89. declare @l int
  90. set @l=0
  91. insert @re
  92. select [modeid],@l,right('00000'+ltrim(modeid),5),modename
  93. from tb where parentid=@id
  94. while @@rowcount>0
  95. begin
  96. set @l=@l+1
  97. insert @re
  98. select a.modeid,@l,b.sort+right('00000'+ltrim(a.modeid),5),
  99. b.path+' - '+a.modename
  100. from tb as a,@re as b
  101. where b.id=a.parentid and b.level=@l-1
  102. end
  103. update @re set level = level
  104. return
  105. end
  106. go
  107.  
  108. select a.modeid,a.parentid,REPLICATE(' ',b.level) +'┝'+a.modename,b.level,b.sort ,b.path from tb a,f_getC(0) b
  109. where a.modeid=b.id
  110. order by sort
  111.  
  112. /*
  113. modeid parentid level
  114. ----------- ----------- -------------------- ----------- -------------------- ----------------------------------------
  115. 100 0 ┝商品管理 0 00100 商品管理
  116. 107 100 ┝商品管理 1 0010000107 商品管理 - 商品管理
  117. 110 107 ┝商品信息管理 2 001000010700110 商品管理 - 商品管理 - 商品信息管理
  118. 111 107 ┝商品分类管理 2 001000010700111 商品管理 - 商品管理 - 商品分类管理
  119. 112 107 ┝回收站管理 2 001000010700112 商品管理 - 商品管理 - 回收站管理
  120. 108 100 ┝明细管理 1 0010000108 商品管理 - 明细管理
  121. 114 108 ┝团购管理 2 001000010800114 商品管理 - 明细管理 - 团购管理
  122. 115 108 ┝拍卖管理 2 001000010800115 商品管理 - 明细管理 - 拍卖管理
  123. 116 108 ┝优惠管理 2 001000010800116 商品管理 - 明细管理 - 优惠管理
  124. 109 100 ┝物流管理 1 0010000109 商品管理 - 物流管理
  125. 101 0 ┝定单管理 0 00101 定单管理
  126. 102 0 ┝用户管理 0 00102 用户管理
  127. 117 102 ┝会员管理 1 0010200117 用户管理 - 会员管理
  128. 118 102 ┝会员卡管理 1 0010200118 用户管理 - 会员卡管理
  129. 119 102 ┝资金管理 1 0010200119 用户管理 - 资金管理
  130. 120 102 ┝管理员管理 1 0010200120 用户管理 - 管理员管理
  131. 121 120 ┝添加管理员 2 001020012000121 用户管理 - 管理员管理 - 添加管理员
  132. 122 120 ┝修改管理员 2 001020012000122 用户管理 - 管理员管理 - 修改管理员
  133. 104 0 ┝学院广告 0 00104 学院广告
  134. 105 0 ┝系统设置 0 00105 系统设置
  135. 106 0 ┝附件管理 0 00106 附件管理
  136.  
  137. (21 行受影响)
  138.  
  139. */
  140.  
  141. ----------

  

SQL 递归树 子父节点相互查询的更多相关文章

  1. 转载:SQL 递归树 子父节点相互查询

    if object_id('[tb]') is not null drop table [tb] go create table [tb]([modeid] int,modename varchar( ...

  2. sql 递归显示所有父节点

    1.我先建两个表 一个表示项目及级别 另一个表示项目最后一级中包含内容.两个表的数据如图 CREATE TABLE [dbo].[yq_Project]( ,) primary key, ) NOT ...

  3. 基于EasyUi ComBotree树修改 父节点选择问题

    本人在使用 Easy UI 期间发现了一个不太适合项目的bug,可能也不算bug把 . 毕竟不同项目背景 取舍不同. 我在做网元树选择的时候  发现当选取父节点后,子节点都会被选择  返回  .但是如 ...

  4. 使用postgre数据库实现树形结构表的子-父级迭代查询,通过级联菜单简单举例

    前言:开发常用的关系型数据库MySQL,mssql,postgre,Oracle,简单的增删改查的SQL语句都与标准SQL兼容,这个不用讲,那么对于迭代查询(不严格的叫法:递归查询)每种数据库都不一样 ...

  5. JavaScript之递归查找所有父节点

    ......data: () => ({ // 数据 dt: [{ id: '1', children: [ { id: '1-1', children: [ { id: '1-1-1', ch ...

  6. SQL根据某一父节点查询所有子节点,无限

    ;with cte as( select id,ParentCategoryId from Category where id = 17 union all select a.id,a.ParentC ...

  7. SqlServer-无限递归树状图结构设计和查询

    在现实生活中,公司的部门设计会涉及到很多子部门,然后子部门下面又存在子部门,形成类似判断的树状结构,比如说评论楼中楼的评论树状图,职位管理的树状图结构等等,实现类似的树状图数据结构是在开发中经常出现的 ...

  8. 使用layer 弹出对话框 子父页面相互参数传递 父页面获取子页面参数实例

    一.先看效果: 1.点击三个点的图标弹出了子页面: 2.子页面调用父页面方法,图一调用父页面方法,图二得到父页面var变量.           3.选择之后,关闭弹框,父页面得到子页面单选框选择的v ...

  9. iframe子父窗口相互操作方法或元素

    一.jquery 父.子页面之间页面元素的获取,方法的调用: 1. 父页面获取子页面元素: 格式:$("#iframe的ID").contents().find("#if ...

随机推荐

  1. autolayout sizeclass 资料集锦

    http://www.raywenderlich.com/20881/beginning-auto-layout-part-1-of-2 Core Animation Programming Guid ...

  2. Oracle----SQL语句积累 (Oracle 导入 dmp文件)

    Oracle----SQL语句积累 (Oracle 导入 dmp文件) Oracle SQL PL  导入dum文件 1.数据库DBA权限: 注意:这个是在cmd命令行中直接输入,不需要进入Oracl ...

  3. Nginx配置指定媒体类型文件强制下载

    由于业务需要,在点击显示链接(如www.xxx.com/2015-01-15/xxx.png)显示媒体资源(如图片.视频.音频.文档),而在点击下载链接(如www.xxx.com/2015-01-15 ...

  4. c# DllImport 找不到指定模块

    两年前的一个项目,基于身份证阅读器的开发,之前都是在公司电脑上开发维护等,今天有需要用到自己的笔记本,只有vs2008和mysql5.5,以为足够,兴致勃勃的拿到客户那里现场解决问题,F5运行程序,程 ...

  5. winform客户端利用webClient实现与Web服务端的数据传输

    由于项目需要,最近研究了下WebClient的数据传输.关于WebClient介绍网上有很多详细介绍,大概就是利用WebClient可以实现对Internet资源的访问.无外乎客户端发送请求,服务端处 ...

  6. ubuntu samba 服务器设置

    安装 SAMBA 组件 sudo apt-get install samba smbfs smbclient ubuntu 14.04 使用以下方式安装: ? 1 2 3 4 5 6 7 若之前有安装 ...

  7. centos安装与卸载postgresql

    1.卸载旧版本postgresql $ yum remove postgresql* 2.更新yum $ yum update 3.下载pgdg-centos92-9.2-6.noarch.rpm,或 ...

  8. Pixel VS Point, FrameBuffer VS RenderBuffer

    // How iOS app MVC works View, Window, AppDelegate ViewController, RootViewController // On Pixel VS ...

  9. Eclipse下maven使用嵌入式(Embedded)Neo4j创建Hello World项目

    Eclipse下maven使用嵌入式(Embedded)Neo4j创建Hello World项目 新建一个maven工程,这里不赘述如何新建maven工程. 添加Neo4j jar到你的工程 有两种方 ...

  10. Hive自定义函数的学习笔记(1)

    前言: hive本身提供了丰富的函数集, 有普通函数(求平方sqrt), 聚合函数(求和sum), 以及表生成函数(explode, json_tuple)等等. 但不是所有的业务需求都能涉及和覆盖到 ...