2012-06-21 19 views
10

Angenommen, wirVerbinden von in Oracle SQL

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 ) 

und

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

Ich bin daran interessiert, was die folgende Abfrage tut

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

folgende Tabellen haben, wie ich diesen Code zu verstehen wählt , manager_id, ename von Mitarbeiter, beginnt es Auswahl f rom diese Zeile, in empno=1, konnte aber nicht verstehen, was diese Zeile tut:

CONNECT BY PRIOR empno = manager_id; 

Ist dies das gleiche wie:

where empno=manager_id? 
+2

[Docs] (http://docs.oracle.com/cd/B19306_01/server.102/b14200/queries003.htm) – turbanoff

Antwort

8
CONNECT BY PRIOR empno = manager_id; 

Dies wird produzieren die Rekursion zu finden. Alle Datensätze, die Teil der nächst niedrigeren Hierarchieebene sind, werden zurückgegeben. Dies wird eine Hierarchie von oben nach unten für alle Manager und ihre jeweiligen untergeordneten Mitarbeiter zurückgeben.

30 (manager_id) 
    12 
    5 (manager_id) 
     1 
     7 
20 (manager_id) 
    15 
    10 
+1

so wie kann ich denke, wenn ich Code wie diesen brauchen etwas zu wählen? –

+1

Einfach immer, wenn Sie etwas bekommen möchten, das Eltern-Kind-Beziehung in hierarchischer Weise hat. – manurajhada

3

Die Abfrage ist rekursiv, es aus den Mitarbeitern # 1 starten (CEO wahrscheinlich) und druckt dann rekursiv alle seine Untergebenen und dann alle ihre Untergebenen usw. (bis alle Angestellten gedruckt sind).

Eine gute Erklärung über die "mit Start und CONNECT BY" können here