15

假设我们有以下表格

create table Employee(
  2    EMPNO         NUMBER(3),
  3    ENAME         VARCHAR2(15 BYTE),
  4    HIREDATE      DATE,
  5    ORIG_SALARY   NUMBER(6),
  6    CURR_SALARY   NUMBER(6),
  7    REGION        VARCHAR2(1 BYTE),
  8    MANAGER_ID    NUMBER(3)
  9  )

create table job (
  2    EMPNO         NUMBER(3),
  3    jobtitle      VARCHAR2(20 BYTE)
  4  )
  5  /

我对以下查询的作用感兴趣

SELECT empno, manager_id, ename
  2  FROM employee
  3  START WITH empno = 1
  4  CONNECT BY PRIOR empno = manager_id;

据我了解,此代码从员工中选择empno, manager_idename它从该行开始选择 where empno=1,但无法理解该行的作用:

CONNECT BY PRIOR empno = manager_id;

这是否与以下内容相同:

where empno=manager_id?
4

2 回答 2

12
CONNECT BY PRIOR empno = manager_id;

这将产生递归。属于下一个较低层次级别的所有记录都将返回。这将为所有经理及其各自的下属返回一个从上到下的层次结构。

30 (manager_id)
   12 
   5 (manager_id)
      1
      7
20 (manager_id)
   15
   10
于 2012-06-21T06:43:24.283 回答
6

查询是递归的,它从员工 #1(可能是 CEO)开始,然后递归地打印他的所有下属,然后是他们的所有下属,依此类推(直到打印所有员工)。

关于“START WITH”和“CONNECT BY”的一个很好的解释可以在这里找到

于 2012-06-21T06:33:24.220 回答