2014-07-08 81 views
0

我正在使用oracle數據庫與休眠。 我有一個EMPLOYEE表,在管理器上有一個自我鏈接。事情是這樣的:SQL父級子級的第n級遞歸

create table employee(
id number(14) not null, 
username varchar(100) not null unique, 
manager number(14), 

constraint employee_pk primary key (id), 
constraint employee_manager_fk foreign key (manager) references employee (id) 
); 

目前,我可以選擇一個員工及其直接孩子:

select e2.* 
from employee e2, 
(select e.* from employee e where e.username='abc') e1 
where e2.manager = e1.id 

union 

select e.* from employee e where e.username='abc' 

我想運行在那裏給我可以選擇的所有一個員工的用戶名時,它的孩子的員工查詢直到第n級。我如何在SQL語句中執行此操作?

+0

可能重複http://stackoverflow.com/questions/14274942/sql-server-cte-and-recursion-example ) – epoch

+0

嗯......它是相關的,但因爲即使答案不同,我相信它不是重複的。 – JackDev

回答

3

這就是connect by是:

select * 
from employee 
where level <= 5 
connect by prior id = .manager 
start with username = 'abc' 

注意level開始從1在與start with標識的行計數。它不是樹的「整體」層級。

在手冊中的更多細節:
http://docs.oracle.com/cd/E11882_01/server.112/e41084/queries003.htm#SQLRF52332

[SQL SERVER CTE和遞歸示例](的
+0

更新了where子句,應該是在from之後。 – JackDev

+0

@JackDev謝謝,更正。 –

0
select e1.* 
from employee e2 
left outer join 
employee e1 on e1.id= e2.manager 
where e2.username='abc' 
union 
select e.* from employee e where e.username='abc' 
+1

這不是一個遞歸查詢。 –