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;

このコードがemployeeから、、を選択することを理解したので、この行から選択を開始しますが、この行がempnomanager_idをするのか理解できませんでした。enameempno=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 に答える