SQL 遞迴查詢範例應用

2021-08-14 21:44:14 字數 3133 閱讀 5890

前段時間因為單位oa的替換,需要做一些上下級的遞迴查詢,一直沒找到辦法。網上找了下資料,心中大概有個數了。

先建立2個表

create table dept(  

deptno int primary key,

dname varchar(20),

loc varchar(20),

sjdeptno int

)

insert into dept values (1,'英三廠','李軍','')

insert into dept values (10,'製造處','小馬',1)  

insert into dept values (11,'研發處','小明',1)  

insert into dept values (21,'技術部','王虎',10)  

insert into dept values (22,'品管部','趙敏',10)  

insert into dept values (23,'軟體部','吳互',11)  

insert into dept values (24,'硬體部','湯公尺',11)

create table emp(

empno int primary key,

ename varchar(20) not null,

insert into emp values(7369,'李軍','clerk',7902,'1980-12-17',1640,null,1);  

insert into emp values(7499,'小馬','salesman',7698,'1981-2-20',11400,300,10);  

insert into emp values(7521,'小明','salesman',7698,'1981-2-22',5200,500,11);  

insert into emp values(7566,'王虎','manager',7839,'1981-4-2',7015,null,21);  

insert into emp values(7654,'趙敏','salesman',7698,'1981-9-28',5200,1400,22);  

insert into emp values(7698,'吳互','manager',7839,'1981-5-1',5900,null,23);  

insert into emp values(7782,'湯公尺','manager',7839,'1981-6-9',2470,null,24);

其中emp表中的deptno和dept表中的deptno是對應的關係,我們想查詢乙個員工的所屬的部門層級架構

with b1 as(

select deptno,dname,dname 一級部門,''二級部門,'' **部門,'' 四級部門,'' 五級部門

from dept where deptno=1 ), /* deptno=1作為root node,這是遞迴查詢的起始點 */

b2 as(

select b.deptno,b.dname,b1.一級部門,b.dname 二級部門,'' **部門,'' 四級部門,'' 五級部門

from b1 join dept b on b.sjdeptno=b1.deptno ), /* 將上面的b1表和dept表(b)作連線查詢,得出b2表 */

b3 as(

select b.deptno,b.dname,b2.一級部門,b2.二級部門,b.dname **部門,'' 四級部門,'' 五級部門

from b2 join dept b on b.sjdeptno=b2.deptno ), /* 將上面的b2表和dept表(b)作連線查詢,得出b3表 */

b as(

select * from b1

union all

select * from b2

union all

select * from b3)

select * from b /* 將b1,b2,b3進行聯合查詢 */

b1,b2,b3 分別查詢的結果,便於理解。

with b1 as(

select deptno,dname,dname 一級部門,''二級部門,'' **部門,'' 四級部門,'' 五級部門 from dept where deptno=1 ),

b2 as(

select b.deptno,b.dname,b1.一級部門,b.dname 二級部門,'' **部門,'' 四級部門,'' 五級部門

from b1 join dept b on b.sjdeptno=b1.deptno ),

b3 as(

select b.deptno,b.dname,b2.一級部門,b2.二級部門,b.dname **部門,'' 四級部門,'' 五級部門

from b2 join dept b on b.sjdeptno=b2.deptno ),

b as(

select * from b1

union all

select * from b2

union all

select * from b3)

select ename,一級部門,二級部門,**部門,四級部門,五級部門 from b join emp on emp.deptno=b.deptno

用乙個連線查詢查詢員工的組織架構

這樣員工的組織架構就很清晰了。

sql實際應用 遞迴查詢

1 既然要談到sql,資料庫表是必須的 2 資料結構 3 獲取某個節點的所有子節點 傳統的寫法 sql2000 很麻煩,暫且就不寫了 來看看cte的寫法 create proc sp gettreebyid treeid int asbegin with ctetree as select from...

遞迴查詢SQL

lz需要的修改自己為對應的,csdn sqlserve大版主 鄒建 我轉貼並且完善一下 測試資料 create table tb id char 3 pid char 3 name nvarchar 10 insert tb select 001 null 山東省 union all select ...

SQL遞迴查詢

create table t bid int,p bid int insert into t select 1,null union all select 2,1 union all select 3,1 union all select 4,3 union all select 5,4 union...