SQL读取树型所有下级或所有上级

在编程或构建中,可能会遇到常常需要根据树型某个节点,读取其所有上级或所有下级的情况。然后绑定到树型部件显示。
在Oracle中,可以用start with ... connect by prior ...来实现。

具体写法是:
查询下级:

select * from sa_dept_dict start with dept_id=2170 connect by prior dept_ID=upper_id order by SORT_ORDER

查询下级:

select * from sa_dept_dict start with dept_id=2170 connect by prior upper_id=dept_ID order by SORT_ORDER

在SQL SERVER 中就要略复杂一些了。需要用With....AS...语句,这个语句也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会
被整个SQL语句所用到。有的时候,是为了让SQL语句的可读性更高些,也有可能是在UNION ALL的不同部分,作为提供数据的部分。
下面我们就用with 结合 union 来查询树型的上级和下级:

查询下级:

with tree as (select * from sa_dept_dict where dept_id=2016 union all
select a.* from sa_dept_dict as a,tree as b where b.dept_id=a.upper_id ) select * from tree order by sort_order

查询上级:

with tree as (select * from sa_dept_dict where dept_id=2016 union all
select a.* from sa_dept_dict as a,tree as b where a.dept_id=b.upper_id ) select * from tree order by sort_order

原文出处:http://bbs.delit.cn/thread-132-1-1.html
转载请注明出处:
撰写人:度量科技 http://www.delit.cn

时间: 2024-10-04 07:12:49

SQL读取树型所有下级或所有上级的相关文章

树型部件分层加载数据实现思路,提高速度,提高效率

我们知道,树型部件中可以以树型展示数据出来.例如我们把组织机构展示出来,可以写业务表:select  dept_id,dept_name,upper_id from sa_dept_dict然后再设置树型关键列未 dept_id,上级列未upper_id.这样就出来了一个树型的数据. 这样在一般业务中是没有问题的,如果我们设想一下sa_dept_dict表中有成千上万条数据,这样直接一下全部读出来形成一棵树,效率可能就很慢.那如何来解决较好呢. 我们知道因为树型是可以一个一个节点展开的,那就可以

SQL递归获取树型路径中文名称

项目中遇到一个树型结构表要根据任意传入节点获取它从根节点一直到自身节点的全部路径的中文名称,并且用'>'与分隔. 我使用在sqlServer中写了一个解析函数方便开发调用. USE [RP_ERP] GO /****** Object: UserDefinedFunction [dbo].[Func_GetDeptPathName] Script Date: 01/09/2015 17:33:30 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIE

Mysql树型结构2种方式及相互转换

Mysql实现树型结构,数据库上常见有2种方式:领接表.预排序遍历树(MPTT). 领接表方式-- 主要依赖于一个 parent 字段,用于指向上级节点,将相邻的上下级节点连接起来,id 为自动递增自动,parent_id 为上级节点的 id. 领接表方式的优点在于容易理解,代码也比较简单明了.缺点则是递归中的 SQL 查询会导致负载变大,特别是需要处理比较大型的树状结构的时候,查询语句会随着层级的增加而增加,WEB 应用的瓶颈基本都在数据库方面,所以这是一个比较致命的缺点,直接导致树结构的扩展

oracle使用connect by进行级联查询 树型菜单

Oracle使用connect by进行级联查询 树型菜单(转) connect by可以用于级联查询,常用于对具有树状结构的记录查询某一节点的所有子孙节点或所有祖辈节点. 来看一个示例,现假设我们拥有一个菜单表t_menu,其中只有三个字段:id.name和parent_id.它们是具有父子关系的,最顶级的菜单对应的parent_id为0.现假设我们拥有如下记录: id name parent_id 1 菜单01 0 2 菜单02 0 3 菜单03 0 4 菜单0101 1 5 菜单0102

HDU_1520_Anniversary party_树型dp

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 Anniversary party Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8233    Accepted Submission(s): 3574 Problem Description There is going to b

一种理想的在关系数据库中存储树型结构数据的方法

一种理想的在关系数据库中存储树型结构数据的方法 在各种基于关系数据库的应用系统开发中,我们往往需要存储树型结构的数据,目前有很多流行的方法,如邻接列表模型(The Adjacency List Model),在此基础上也有很多人针对不同的需求做了相应的改进,但总是在某些方面存在的各种各样的缺陷.    那么理想中的树型结构应具备哪些特点呢?数据存储冗余小.直观性强:方便返回整个树型结构数据:可以很轻松的返回某一子树(方便分层加载):快整获以某节点的祖谱路径:插入.删除.移动节点效率高等等.带着这

Rafy 领域实体框架 - 树型实体功能(自关联表)

  在 Rafy 领域实体框架中,对自关联的实体结构做了特殊的处理,下面对这一功能进行讲解.   场景 在开发数据库应用程序时,往往会遇到自关联表的场景.例如,分类信息.组织架构中的部门.文件夹信息等,都是不限制层级的.如下图中操作系统的文件夹: 在开发这类程序时,往往是设计一张表,表中的一个可空的外键直接引用这张表本身.对应的实体如下图: 而针对这样的场景,许多ORM框架都不做默认的处理,开发者往往每次都要做重复的工作:建立类似结构的表,编写关系处理代码,编写查询代码--而这种场景经常会出现,

php递归函数实现无限级树型菜单

!!写递归函数,可考虑缓存,定义一些静态变量来存上一次运行的结果,多程序运行效率很有帮助. 大概步骤如下: 首先到数据库取数据,放到一个数组, 然后把数据转化为一个树型状的数组, 最后把这个树型状的数组转为html代码. 也可以将第二步和第三步合为一步. 详细如下: 1.数据库设计: 脚本如下: CREATE TABLE `bg_cate` ( `cate_Id` int(30) unsigned NOT NULL AUTO_INCREMENT, `cate_ParentId` int(30)

树型菜单

不在大家有没有注意到,我们电脑的每个文件夹就是一个树型菜单,可以有很多下级菜单. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <he