关于数据库的递归查询
1、Oracle
以scott.emp表举例:empno是人员编号,mgr是上级领导(也就是上级人员编码)
(1)、从上到下查询
--该查询查询员工JONES下属所有的员工
select emp.*
from emp
start with ename='JONES'
CONNECT BY mgr=PRIOR empno;
7566 JONES MANAGER 7839 02-4月 -81 2975 (null) 20
7788 SCOTT ANALYST 7566 19-4月 -87 3000 (null) 20
7876 ADAMS CLERK 7788 23-5月 -87 1100 (null) 20
7902 FORD ANALYST 7566 03-12月-81 3000 (null) 20
7369 SMITH CLERK 7902 17-12月-80 800 (null) 20
(2)、从下到上查询
--该查询查询员工JONES上面的所有的员工
select emp.*
from emp
start with ename='JONES'
CONNECT BY PRIOR mgr=empno;
7566 JONES MANAGER 7839 02-4月 -81 2975 (null) 20
7839 KING PRESIDENT (null) 17-11月-81 5000 (null) 10
(3)、中见到两边查询
--该查询以员工JONES为准查询上下级所有员工
select emp.*
from emp
start with ename='JONES'
CONNECT BY mgr=PRIOR empno
UNION
select emp.*
from emp
start with ename='JONES'
CONNECT BY PRIOR mgr=empno;
select
tab_temp.ID,tab_temp.FID,tab_temp.USER_ID,tab_temp.USER_NAME,LTRIM(SYS_CONNECT_BY_PATH(NCHR(TAB_TEMP.NEWORDER),','),',') NEWORDER
from
(select G_DEPT.ID,G_DEPT.FID,G_DEPT.USER_ID,G_USERS.UNAME USER_NAME,LEVEL LEV,G_USERS.UTYPE,(ROW_NUMBER () OVER (PARTITION BY G_DEPT.FID ORDER BY G_DEPT.SHORDER)) NEWORDERfrom G_DEPTinner join G_USERS on G_USERS.ID=G_DEPT.USER_IDwhere 1=1 and G_USERS.STATUS>-1 and G_USERS.ISNATIVE=1start with G_DEPT.FID=0CONNECT by prior G_DEPT.ID=G_DEPT.FID
) tab_temp
where 1=1 and TAB_TEMP.UTYPE IN(0,9)
start with tab_temp.FID=0
CONNECT by prior tab_temp.ID=tab_temp.FID
order by NEWORDER;
select G_USERS.ID,G_USERS.UNAME,G_DEPT.FID,G_DEPT.ID,
SYS_CONNECT_BY_PATH(G_DEPT.SHORDER,',') bb,
level lv
from (select G_DEPT.ID,G_DEPT.FID,G_DEPT.USER_ID,G_DEPT.ISMAIN,LPAD(row_number() over(partition by G_DEPT.FID order by G_DEPT.SHORDER),3,'0') SHORDERfrom G_DEPTwhere 1=1
) G_DEPT
inner join G_USERS on G_USERS.ID=G_DEPT.USER_ID
where 1=1and G_USERS.STATUS>-1 and G_USERS.UTYPE=0 and G_DEPT.ISMAIN=1
start with G_DEPT.USER_ID IN(select tab_inner1.User_Id from G_DEPT tab_inner1inner join G_DEPT tab_inner2 on tab_inner2.ID=tab_inner1.Fidwhere tab_inner2.USER_ID=(select ID from G_USERS where UTYPE=8 and status>-1 and isnative=1)
)
connect by prior G_DEPT.ID=G_DEPT.FID
order by bb;
2、sql server
把emp表的数据迁移到sql Server上面来
(1)、从下级到上级取数据
--以员工JONES为准获取上级的所有员工
WITH OrgPath(empno,mgr)
AS
(SELECT empno,mgr FROM emp WHERE ename='JONES'UNION ALLSELECT emp.empno,emp.mgrFROM emp INNER JOIN OrgPath on emp.empno=OrgPath.mgr
)
SELECT emp.*
FROM emp
INNER JOIN OrgPath ON OrgPath.empno=emp.empno;
(数据和Oracle上的一样)
(2)、从上级到下级取数据
--以员工JONES为准获取下级的所有员工
WITH OrgPath(empno,mgr)
AS
(SELECT empno,mgr FROM emp WHERE ename='JONES'UNION ALLSELECT emp.empno,emp.mgrFROM emp INNER JOIN OrgPath on emp.mgr=OrgPath.empno
)
SELECT emp.*
FROM emp
INNER JOIN OrgPath ON OrgPath.empno=emp.empno;
(数据与Oracle的一样)
(3)、从中间到两边取数据
--以员工JONES为准获取上下级的所有员工
WITH
TempPath(empno,mgr)
AS
(SELECT empno,mgr FROM emp WHERE ename='JONES'UNION ALLSELECT emp.empno,emp.mgrFROM emp INNER JOIN TempPath on emp.mgr=TempPath.empno
),
OrgPath(empno,mgr)
AS
(SELECT empno,mgr FROM emp WHERE ename='JONES'UNION ALLSELECT emp.empno,emp.mgrFROM emp INNER JOIN OrgPath on emp.empno=OrgPath.mgr
)
SELECT emp.* FROM emp
WHERE 1=1
AND (emp.empno IN(SELECT empno FROM TempPath)ORemp.empno IN(SELECT empno FROM OrgPath)
);
(数据与Oracle数据一样)
注:其实oracle数据也是支持with语法查询的,但是sql Server 不支持start with语法查询
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
其他数据库以后更新。。。。
关于数据库的递归查询相关推荐
- oracle递归查询详解,[数据库]Oracle递归查询
[数据库]Oracle递归查询 0 2015-11-16 19:00:07 一.创建数据 1.1.建立表与插入数据CREATE TABLE DISTRICT( ID NUMBER(10) NOT NU ...
- mysql 在不同的数据库间查询语句_有关数据库SQL递归查询在不同数据库中的实现方法...
本文给大家介绍有关数据库SQL递归查询在不同数据库中的实现方法,具体内容请看下文. 比如表结构数据如下: Table:Tree ID Name ParentId 1 一级 0 2 二级 1 3 ...
- 数据库实现递归查询,获取节点的所有子孙节点
with cte as (select orgid from fx_org where orgid ='138' union all select fx_org.orgid from fx_org i ...
- 关于Oracle数据库start whith 递归查询的另类认知
众所周知,Oracle数据库的递归查询是 start whith connect by prior 方法,我们在查询上下级部门或组织架构的时候常常会用到它, 其主要的用法为 select 部门编号 f ...
- 同事问我MySQL怎么递归查询,我懵逼了...
前言 最近在做的业务场景涉及到了数据库的递归查询.我们公司用的 Oracle ,众所周知,Oracle 自带有递归查询的功能,所以实现起来特别简单. 但是,我记得 MySQL 是没有递归查询功能的,那 ...
- 简单项目-图书借阅系统
项目简介: 该项目是一个图书管理系统,开发项目人员配备位 4人,开发时长20天,分布式开发 系统使用过的框架及插件 框架使用主要使用了Spring+Spring MVC+mybatis框架 前端使用的 ...
- Spring Boot参考指南
Spring Boot参考指南 作者 菲利普·韦伯,戴夫 Syer,约什 长,斯特凡 尼科尔,罗布 绞车,安迪·威尔金森,马塞尔 Overdijk,基督教 杜普伊斯,塞巴斯蒂安·德勒兹,迈克尔·西蒙斯 ...
- C# 使用Linq递归查询数据库遇到的问题及解决方法
C# 使用Linq递归查询数据库遇到的问题及解决方法 参考文章: (1)C# 使用Linq递归查询数据库遇到的问题及解决方法 (2)https://www.cnblogs.com/zhouhongyu ...
- 递归查询mysql数据库设计
国标地图 省-市-区-县-镇-村全部数据为711892条数据, 如果要查询到全国省市区镇村的数据,数据库表结构设计不合理的情况下很有可能出现死查询的情况, 最开始的表结构如下 code paren ...
最新文章
- [转载]Tensorflow 的reduce_sum()函数的axis,keep_dim这些参数到底是什么意思?
- [:zh]给机械课程设计的一封信[:] 2017-12-23
- 计算机常用英语1000个,1000个常用英语单词.pdf
- 深圳,本周日,华为云开发者大会,免费报名中
- Taro开发微信小程序遇到的问题和解决方法
- python使用-使用python进行数据清洗
- python 栈_python:栈的理解与应用
- 09-部署配置kubedns插件
- mysql union limit_mysql中的union和order by、limit
- Tampermonkey 油猴脚本,chrome插件
- 新版Idea设置代码提示背景色
- 地理信息系统GIS在城市生活垃圾管理中的应用时间
- pascal指针 c语言指针,pascal指针 - Pascal教程
- 基于F340 实现Bridge功能(二):上位机应用程序编写
- 云计算未来的5个发展趋势分析
- 论文的研究背景如何着笔
- cocos creator 达达麻将(麒麟麻将)运行环境配置
- 不走寻常路的Logitech G120
- iOS 12-12.1.2 完整越狱教程
- 命令rpm -qa | grep xxxx