两张表
Table EMP
emp_id number(10)
emp_name varchar2
dept_id number(10)
mgr_emp_id number(10)Table DEPT
dept_id number(10)
dept_name varchar2怎么才可以写一个SELECT语句来获取该组织等级的代表性。下面的例子表明,史密斯的手下就是琼斯,迈尔斯和约翰逊。约翰逊的手下是罗伯茨:史密斯
琼斯
迈尔斯
约翰逊
罗伯茨
怎么才能写成这种样式
Table EMP
emp_id number(10)
emp_name varchar2
dept_id number(10)
mgr_emp_id number(10)Table DEPT
dept_id number(10)
dept_name varchar2怎么才可以写一个SELECT语句来获取该组织等级的代表性。下面的例子表明,史密斯的手下就是琼斯,迈尔斯和约翰逊。约翰逊的手下是罗伯茨:史密斯
琼斯
迈尔斯
约翰逊
罗伯茨
怎么才能写成这种样式
2 connect by mgr=prior empno
3 start with mgr is null;ENAME
----------
KING
JONES
SCOTT
ADAMS
FORD
SMITH
BLAKE
ALLEN
WARD
MARTIN
TURNERENAME
----------
JAMES
CLARK
MILLER
start with mgr_emp_id is null
connect by mgr_emp_id = prior emp_id;
怎么才可以写一个SELECT语句来获取该组织等级的代表性。下面的例子表明,史密斯的手下就是琼斯,迈尔斯和约翰逊。约翰逊的手下是罗伯茨:史密斯
琼斯
迈尔斯
约翰逊
罗伯茨
上司和手下不在同一竖行
create or replace function mypad(str varchar2, len number) return varchar2 is
ret varchar2(2000) := '';
begin
for i in 1..len loop
ret := ret || str;
end loop;
return ret;
end;col name format a30
select empno,mgr,mypad(' ', level - 1) || ename "name" from scott.emp
start with mgr is null
connect by mgr = prior empno; EMPNO MGR name
---------- ---------- ------------------------------
7839 KING
7566 7839 JONES
7788 7566 SCOTT
7876 7788 ADAMS
7902 7566 FORD
7369 7902 SMITH
7698 7839 BLAKE
7499 7698 ALLEN
7521 7698 WARD
7654 7698 MARTIN
7844 7698 TURNER
7900 7698 JAMES
7782 7839 CLARK
7934 7782 MILLER
2 start with mgr is null
3 connect by mgr = prior empno;
EMPNO MGR name
----- ----- --------------------------------------------------------------------------------
7839 KING
7566 7839 JONES
7788 7566 SCOTT
7876 7788 ADAMS
7902 7566 FORD
7698 7839 BLAKE
7499 7698 ALLEN
7521 7698 WARD
7654 7698 MARTIN
7844 7698 TURNER
7900 7698 JAMES
7782 7839 CLARK
7934 7782 MILLER
13 rows selected
insert into emp values(2,'车',2,1);
insert into emp values(3,'马',2,1);
insert into emp values(4,'炮',2,1);
insert into emp values(5,'士',3,2);
insert into emp values(6,'相',3,2);
insert into emp values(7,'兵',3,2);
---------------------------------------
insert into dept values (1,'作战中心');
insert into dept values (2,'帅帐中');
insert into dept values (3,'车部下');
---------------------------------------select e.emp_id,d.dept_name,lpad(' ', 2*level - 1)||e.emp_name as name
from emp e,dept d where e.DEPT_ID=d.DEPT_ID
start with e.emp_id=1 connect by prior e.emp_id=e.mgr_emp_id ;