在与同事Rock讨论中,得到一个思路,不用嵌套调用直接用一个语句就可以生成树,实事上他已经做好了该程序,他用了临时表写了一个存储过程,我改写为一个表值函数,供大家参考:

表结构及表值函数如下:

查询树表语句
 1 /**/ /* ***** Object:  Table [dbo].[Tree]    Script Date: 2005-11-04 18:07:00 ***** */
 2 CREATE   TABLE   [ dbo ] . [ Tree ]  (
 3   [ ID ]   [ int ]   IDENTITY  ( 1 ,  1 )  NOT   NULL  ,
 4   [ PID ]   [ int ]   NULL  ,
 5   [ Name ]   [ varchar ]  ( 10 ) COLLATE Chinese_PRC_CI_AS  NULL  
 6 )  ON   [ PRIMARY ]
 7 GO
 8
 9   CREATE    CLUSTERED    INDEX   [ IX_Tree ]   ON   [ dbo ] . [ Tree ] ( [ PID ] )  ON   [ PRIMARY ]
10 GO
11
12 ALTER   TABLE   [ dbo ] . [ Tree ]   WITH   NOCHECK   ADD  
13   CONSTRAINT   [ PK_Tree ]   PRIMARY   KEY    NONCLUSTERED  
14  (
15    [ ID ]
16  )   ON   [ PRIMARY ]  ,
17   CONSTRAINT   [ 子ID不能等于父ID ]   CHECK  ( [ ID ]   <>   [ PID ] )
18 GO
19
20 ALTER   TABLE   [ dbo ] . [ Tree ]   ADD  
21   CONSTRAINT   [ FK_Tree_Tree ]   FOREIGN   KEY  
22  (
23    [ PID ]
24  )  REFERENCES   [ dbo ] . [ Tree ]  (
25    [ ID ]
26  )
27 GO
28
29 /**/ /* ***** 对象:  用户定义的函数 dbo.fGetTreeTable    脚本日期: 2005-11-04 18:07:02 ***** */
30 CREATE   FUNCTION  dbo.fGetTreeTable
31  (
32   @ID   int =   null
33  )
34 RETURNS   @Tab   TABLE (ID  int , PID  int , Name  varchar ( 10 ), Lev  int )
35 AS
36   BEGIN
37    Declare   @lev   int
38    Set   @lev = 0
39   
40    While   @lev = 0   or   @@ROWCount > 0
41    Begin
42     Set   @Lev = @Lev + 1
43     Insert   @Tab (ID, PID, Name, Lev)
44     Select  ID, PID, Name,  @Lev   From  Tree  Where  ( @Lev = 1   and  ((PID = @ID )  or  ( @ID   is   null   and  PID  is   null )))  or  (PID  in  ( Select  ID  From   @Tab   Where  Lev = @Lev - 1 ))
45     order   by  ID
46    End
47    RETURN
48   END
49
50 GO
51
52 -- 实际数据
53 Insert  Tree(PID, Name)  values ( null , 公司)
54 Insert  Tree(PID, Name)  values ( 3 , IT)
55 Insert  Tree(PID, Name)  values ( 1 , Fin)
56 Insert  Tree(PID, Name)  values ( 5 , XZ)
57 Insert  Tree(PID, Name)  values ( 1 , HR)
58 GO
59
60

直接查询Select * from dbo.fGetTreeTable(null)就可以输入所有记录。


数据库技术就是一坛陈年老酒,越久越香,学以致用。

简单查询树形结构数据库表相关推荐

  1. mysql单表查询实例_MySQL简单查询详解-单表查询

    MySQL简单查询详解-单表查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询的执行路径 一条SQL查询语句的执行过程大致如下图所示: 1>.客户端和服务端通过my ...

  2. mybatis mysql查询树形结构_MyBatis collection 集合嵌套查询树形节点

    原标题:MyBatis collection 集合嵌套查询树形节点 MyBatis collection 集合 MyBatis 是数据持久层框架,支持定制化 SQL.存储过程以及高级映射.尤其强大在于 ...

  3. mysql 树形结构_MySQL 树形结构数据库设计 | 剑花烟雨江南

    程序设计过程中,我们常常用树形结构来表示某些数据的关联关系,如企业的部门上下级.电商平台的商品分类等等,通常而言,我们需要通过数据库来完成数据的持久化.由于关系型数据库没有一个很好的树形结构解决方案, ...

  4. 实验四 数据查询——简单查询 Sql Server数据库实验

    实验四  数据查询--简单查询   一.实验目的 1.掌握SQL查询语句的基本概念  2.掌握SQLServer查询语句的基本语法 3.熟练使用SQL的Select语句对单表进行查询 4.熟练掌握并运 ...

  5. mybatis mysql查询树形结构_mybatis树结构查询的方法

    记录一下 表结构为: BKZ101 bigint(16) (NULL) NO PRI (NULL) select,insert,update,references DRGS疾病分组ID BKA504 ...

  6. mysql 查询树形结构_MySql/Oracle树形结构查询

    Oracle树形结构递归查询 在Oracle中,对于树形查询可以使用start with ... connect by select * from treeTable start with id='1 ...

  7. js生成简单的树形结构_思维干货收藏,“决策树”一种可视化决策的简单方法...

    今天来介绍一种决策可视化的模型,作为质量人特别是在呈现质量问题解决和质量数据分析时都会应用到,这里通过网络我收集了下面这篇文章分享给大家,一起交流和学习,希望能给你带来帮助,同时分享你的建议和意见. ...

  8. DBCHM-最简单、实用的数据库表列批注维护工具

    DBCHM支持SqlServer/MySql/Oracle/PostgreSQL/Sqlite等数据库的表列批注维护管理. DBCHM有以下几个功能 表,列的批注可以编辑保存到数据库. 表,列的批注支 ...

  9. mysql同时查两张表数据库表_如何同时查询两个数据库表?

    展开全部 sql多表关联查询跟条件查询大同小异,主要是要知道表与表之前的关系很重e69da5e6ba9062616964757a686964616f31333431353238要: 举例说明:(某数据 ...

  10. php购物车数据表,PHP开发简单购物车功能创建数据库表

    前面的章节我们分别介绍了javascript和jquery实现购物车功能. 本章节我们将通过php代码来为朋友们讲解购物车功能实现思路. 方法是把从数据库中获取的商品存入数组,对数组进行操作,数组中的 ...

最新文章

  1. 电影天堂React Native 客户端
  2. 利用ConcurrentHashMap来实现一个ConcurrentHashSet
  3. unity shader 变种(多重编译 multi_compile)
  4. Kundera 2.1 发布,NoSQL 的 ORM 框架
  5. vue_axios请求封装、异常拦截统一处理
  6. Oracle常用函数解析运用整理
  7. 两角和与差的余弦公式的五种推导方法之对比
  8. P5708_三角形面积(深基2.习2)
  9. 手机屏幕的色彩偏离度(ΔE)(也就是常说的色准)
  10. 计算机科学中的数学第一章答案,翻译《计算机科学与数学》第一章第四节:我们的公理...
  11. 论文阅读:Seg4Reg+: Consistency Learning Between Spine Segmentation and Cobb Angle Regression
  12. MPEG-7描述子(0)——颜色空间
  13. Unhandled JS Exception: Unexpected identifier ‘_classCallCheck‘. import call expects exactly one arg
  14. 【软件测试】—— 水杯测试用例
  15. msvc2017配置qt5.12.8 x86和x64库版本切换
  16. 从程序员到项目经理(5):程序员加油站 -- 不是人人都懂的学习要点
  17. 深入理解wifi direct
  18. 今晚7:30 | CVPR专场五来了!
  19. 微信小程序—本地存储
  20. c语言程序设计库搜索app,C语言编程宝典app

热门文章

  1. 安卓工程师转行JAVA_转行|如何成为企业想要的Android工程师
  2. LINUX登录界面,输入密码,循环重启出现
  3. Can‘t find third_party/gtest. Run git submodule update --init, or disable with CMake -DBUILD_TEST
  4. 距离感应器黑屏,如何一直亮屏
  5. SHELL中如何获得指定字符的位置及正确的截取动作
  6. 玉龙雪山还会存在多久
  7. 管理感悟:工作计划要分阶段
  8. ubuntu退出mysql sql语句_Ubuntu 16.04安装、卸载mysql及怎么使用SQL常用操作语句
  9. mysql的初始化语句是_MySQL入门之预处理语句的使用
  10. 使用 vue_VUE使用ECharts教程