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语法查询

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

其他数据库以后更新。。。。

关于数据库的递归查询相关推荐

  1. oracle递归查询详解,[数据库]Oracle递归查询

    [数据库]Oracle递归查询 0 2015-11-16 19:00:07 一.创建数据 1.1.建立表与插入数据CREATE TABLE DISTRICT( ID NUMBER(10) NOT NU ...

  2. mysql 在不同的数据库间查询语句_有关数据库SQL递归查询在不同数据库中的实现方法...

    本文给大家介绍有关数据库SQL递归查询在不同数据库中的实现方法,具体内容请看下文. 比如表结构数据如下: Table:Tree ID Name ParentId 1 一级  0 2  二级 1 3  ...

  3. 数据库实现递归查询,获取节点的所有子孙节点

    with cte as (select orgid from fx_org where orgid ='138' union all select fx_org.orgid from fx_org i ...

  4. 关于Oracle数据库start whith 递归查询的另类认知

    众所周知,Oracle数据库的递归查询是 start whith connect by prior 方法,我们在查询上下级部门或组织架构的时候常常会用到它, 其主要的用法为 select 部门编号 f ...

  5. 同事问我MySQL怎么递归查询,我懵逼了...

    前言 最近在做的业务场景涉及到了数据库的递归查询.我们公司用的 Oracle ,众所周知,Oracle 自带有递归查询的功能,所以实现起来特别简单. 但是,我记得 MySQL 是没有递归查询功能的,那 ...

  6. 简单项目-图书借阅系统

    项目简介: 该项目是一个图书管理系统,开发项目人员配备位 4人,开发时长20天,分布式开发 系统使用过的框架及插件 框架使用主要使用了Spring+Spring MVC+mybatis框架 前端使用的 ...

  7. Spring Boot参考指南

    Spring Boot参考指南 作者 菲利普·韦伯,戴夫 Syer,约什 长,斯特凡 尼科尔,罗布 绞车,安迪·威尔金森,马塞尔 Overdijk,基督教 杜普伊斯,塞巴斯蒂安·德勒兹,迈克尔·西蒙斯 ...

  8. C# 使用Linq递归查询数据库遇到的问题及解决方法

    C# 使用Linq递归查询数据库遇到的问题及解决方法 参考文章: (1)C# 使用Linq递归查询数据库遇到的问题及解决方法 (2)https://www.cnblogs.com/zhouhongyu ...

  9. 递归查询mysql数据库设计

    国标地图   省-市-区-县-镇-村全部数据为711892条数据, 如果要查询到全国省市区镇村的数据,数据库表结构设计不合理的情况下很有可能出现死查询的情况, 最开始的表结构如下 code paren ...

最新文章

  1. [转载]Tensorflow 的reduce_sum()函数的axis,keep_dim这些参数到底是什么意思?
  2. [:zh]给机械课程设计的一封信[:] 2017-12-23
  3. 计算机常用英语1000个,1000个常用英语单词.pdf
  4. 深圳,本周日,华为云开发者大会,免费报名中
  5. Taro开发微信小程序遇到的问题和解决方法
  6. python使用-使用python进行数据清洗
  7. python 栈_python:栈的理解与应用
  8. 09-部署配置kubedns插件
  9. mysql union limit_mysql中的union和order by、limit
  10. Tampermonkey 油猴脚本,chrome插件
  11. 新版Idea设置代码提示背景色
  12. 地理信息系统GIS在城市生活垃圾管理中的应用时间
  13. pascal指针 c语言指针,pascal指针 - Pascal教程
  14. 基于F340 实现Bridge功能(二):上位机应用程序编写
  15. 云计算未来的5个发展趋势分析
  16. 论文的研究背景如何着笔
  17. cocos creator 达达麻将(麒麟麻将)运行环境配置
  18. 不走寻常路的Logitech G120
  19. iOS 12-12.1.2 完整越狱教程
  20. 命令rpm -qa | grep xxxx

热门文章

  1. 如何利用SQL注入进行爆库
  2. Spring Boot 结合 FreeMarker导出word文件
  3. 微信小程序支持windows PC版了
  4. Java实现电脑屏幕的截取并保存成图片
  5. 对于Ubuntu16.04中jstest-gtk不能正常识别Logitech G920 racing wheel的问题补充
  6. mysql条件删除表中某些行数据_根据MySQL中的条件仅删除表中的某些行
  7. 记录下2345锁定主页解决方案
  8. ElasticSearch之 ik分词器详解
  9. 全名k歌自定义图文链接(卡片)
  10. 网络游戏源代码分析_为您的游戏选择正确的网络代码