2015-03-30 6 views
0

Я пытаюсь реализовать иерархический запрос в моем проекте. Я прочитал большинство документов в Интернете, но не смог получить информацию об использовании ПРИОР в нем.Использование предшествующего в иерархическом запросе

SELECT EMPNO,ENAME,MGR,LEVEL 
FROM TMP_PCH 
CONNECT BY PRIOR EMPNO=MGR 
START WITH MGR IS NULL; 

ПРИОР играет существенную роль в этом запросе, но изменение положения ПРИОР или удаление его из запроса дает мне другой результат.
Было бы очень полезно, если вы можете помочь мне понять точное использование этого.
Thanks :)

ответ

1

Иерархия означает, что одна строка таблицы является «родительской», а другая - «дочерней». PRIOR используется, чтобы показать, кто есть кто. Пункт CONNECT BY PRIOR EMPNO = MGR означает, что если две строки имеют одинаковое значение, но одна строка в столбце EMPNO, а вторая - в столбце MGR, то вторая является «родительской» и сначала является «дочерней». Таким образом, запрос

SELECT EMPNO,ENAME,MGR,LEVEL 
FROM TMP_PCH 
CONNECT BY PRIOR EMPNO = MGR 
START WITH MGR = 'John' 

возвращает все подчиненные Иоанна (и самого Иоанна) и запрос

SELECT EMPNO,ENAME,MGR,LEVEL 
FROM TMP_PCH 
CONNECT BY PRIOR MGR = EMPNO 
START WITH MGR = 'John' 

возвращает все боссы Джона (и самого Иоанна).

+0

Большое спасибо @Dmitry – Pratsam

1

вы можете понять PRIOR как ссылку на предыдущий уровень иерархии.
PRIOR MGR = EMPNO означает «менеджер от предыдущего уровня теперь работник», поэтому мы будем снизу вверх
PRIOR EMPNO = MGR означает «работник с предыдущего уровня теперь менеджер», поэтому мы будем сверху вниз

, когда вы пишете, как этот EMPNO = PRIOR MGR, вы можете прочитать его как «мы идем в направлении от работника к своему менеджеру»

снизу вверх

   MGR 
PRIOR MGR EMPNO 
PRIOR EMPNO 

против сверху вниз

PRIOR MGR 
PRIOR EMPNO MGR 
      EMPNO