在工作当中会经常用到递归,比如菜单的展示。一种方法就是从数据库中取出所有的数据,然后在程序中循环获取符合条件的数据。另外一种方法就是使用SQL直接读取符合条件的数据。对于递归查询,T-SQL和PL/SQL进行了不同的处理。

以表Deparment为例

表结构为:

Id 部门内码,

DeptCode 部门编码,

ParentDeptId 上级部门内码

使用T-SQL:

with Dep as
( select Id,DeptCode,DeptName from Department where Id=1 union all select d.Id,d.DeptCode,d.DeptName from Dep inner join Department d on dep.Id = d.ParentDeptId
) select * from Dep 

.csharpcode, .csharpcode pre { font-size: small; color: rgba(0, 0, 0, 1); font-family: consolas, "Courier New", courier, monospace; background-color: rgba(255, 255, 255, 1) } .csharpcode pre { margin: 0 } .csharpcode .rem { color: rgba(0, 128, 0, 1) } .csharpcode .kwrd { color: rgba(0, 0, 255, 1) } .csharpcode .str { color: rgba(0, 96, 128, 1) } .csharpcode .op { color: rgba(0, 0, 192, 1) } .csharpcode .preproc { color: rgba(204, 102, 51, 1) } .csharpcode .asp { background-color: rgba(255, 255, 0, 1) } .csharpcode .html { color: rgba(128, 0, 0, 1) } .csharpcode .attr { color: rgba(255, 0, 0, 1) } .csharpcode .alt { background-color: rgba(244, 244, 244, 1); width: 100%; margin: 0 } .csharpcode .lnum { color: rgba(96, 96, 96, 1) }

简单解释一下:with as属于sql server新特性CTE(Common Table Expression)的关键字,用来储存临时结果集。常用于代替子查询。本例中可以理解为,找出Id=1的记录后,存放在临时表Dept中,然后临时表和Department进行内连接,找出它的子记录。子记录和第一条记录union后作为Dept新的结果集继续进行内连接,找出新的子记录。

使用PL/SQL:

select Id,DeptCode,DeptName
from Department
start with Id = 1
connect by prior Id = ParentDeptId; 

start with 表示从哪一行记录开始递归查询,即根节点 connect by 表示进行递归,后面跟递归条件 prior 表示前一条记录,表示上一条记录的Id = 下一条记录的ParentDeptId 比如上面的SQL语句就可以理解为,以Id 为1的记录为根节点,递归查询下一条记录的ParentDeptId = 前一条记录的Id

以上,对使用SQL进行递归查询进行了简单的总结,作为备忘录吧,希望也可以对大家有所帮助,谢谢!

使用SQL进行递归查询相关推荐

  1. SQL 语句递归查询 With AS 查找所有子节点

    SQL 语句递归查询 With AS 查找所有子节点 create table #EnterPrise (   Department nvarchar(50),--部门名称   ParentDept  ...

  2. sql oracle 递归查询语句,深入sql oracle递归查询

    ☆ 获取数据库所有表名,表的所有列名 select name from sysobjects where xtype='u' select name from syscolumns where id= ...

  3. oracle 递归查询,深入sql oracle递归查询

    ☆ 获取数据库所有表名,表的所有列名   select name from sysobjects where xtype='u' select name from syscolumns where i ...

  4. oracle用一个字段往上递归,深入sql oracle递归查询

    获取数据库所有表名,表的所有列名 select name from sysobjects where xtype='u' select name from syscolumns where id=(s ...

  5. sql oracle 递归查询语句,oracle递归函数 oracle中SQL递归查询

    关于oracle递归调用的自定义函数如何结束 比如存储过程a中有b,b中含a.用return结束判断,执行还是锁表,怎么解决 关于oracle递归调用的自定义函数如何结束 可以调用. C语言最基本的模 ...

  6. sql oracle 递归查询语句,Oracle使用SQL语句进行递归查询

    id pid 问题描述: 1 0 2 0 3 1 4 1 5 2 6 2 7 3 8 4 9 5 取出id为1及其下属的所有的数据,结果为下 id pid 1 0 3 1 4 1 7 3 8 4 SQ ...

  7. oracle中sql的递归查询运用

    当表自查询的时候,就基本会用到递归的查询 比如一个员工表 主键             名字               职位         上级id                  部门id i ...

  8. SQL SERVER 递归查询(4)——递归层级查询

    我们在做递归查询的时候,有时候需要查询特定某一级的数据,如果我们的数据上没有标注该数据的层级数,那么我们可以在递归的时候自己加一个,并在读取的时候作为查询条件来用,测试数据: --测试数据 if no ...

  9. SQL Server递归查询无限级分类

    2019独角兽企业重金招聘Python工程师标准>>> WITH cte_parent(OrderOpenId, SharedOpenId, SubjectId) AS (SELEC ...

最新文章

  1. k-means聚类算法从入门到精通
  2. php函数间参数传递(值传递/引用传递)
  3. 有点长的 Java API 设计清单
  4. opencv python matplotlib.pyplot.hist() 如何绘制灰度直方图,如何根据灰度直方图确定最优二值化值
  5. 阿里巴巴DevOps实践指南 | 为什么DevOps的必然趋势是BizDevOps?
  6. 廖雪峰Java10加密与安全-4加密算法-5非对称加密算法
  7. dubbo-admin构建报错
  8. nlp2-数学基础(信息论,概率论、词义消歧)
  9. UE3 光照 阴影
  10. 被“薅羊毛”损失200多万!元气森林:系运营事故
  11. 行测(爆发篇)之语句表达,像说话一样自然
  12. SSL-Explorer 安装配置
  13. JAVA开发环境搭建
  14. html当前时间插件,HTML日期时间插件
  15. 找不到或无法加载主类怎么办
  16. CSS3之图片列表展示特效
  17. word2019如何删除段落文字带颜色的背景
  18. KVstore 笔记【随时增】
  19. 关于MySQL错误提示ERROR 1265 (01000)的问题分析及解决方案
  20. 枢轴点(Pivot Point)系统

热门文章

  1. C++实现connected component连通分量(附完整源码)
  2. 数组中只出现1次的2个数
  3. QT的QDBusPendingCallWatcher类的使用
  4. c++STL算法基础
  5. 经典C语言程序100例之四二
  6. 经典C语言程序100例之四零
  7. css 渐变色_如何设置渐变色的单元格值?
  8. 卡尔曼滤波器求速度matlab,卡尔曼滤波器算法浅析及matlab实战
  9. Ambari2.7.4+HDP3.1.4下sqoop增量导入只支持append模式,mysql直接进入hive的lastmodified的不支持。下面是增量的命令。
  10. ibatis中多表联接查询