Подключиться в 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 )
и
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_id
, ename
у сотрудника, он начинает выбор из этой строки, где empno=1
, но не мог понять, что делает эта строка:
CONNECT BY PRIOR empno = manager_id;
Это то же самое, что:
where empno=manager_id?
Ответы
Ответ 1
CONNECT BY PRIOR empno = manager_id;
Это приведет к рекурсии. Все записи, которые являются частью следующего нижнего иерархического уровня, вернутся. Это вернет иерархию сверху вниз для всех менеджеров и их соответствующих под работающими подчиненными.
30 (manager_id)
12
5 (manager_id)
1
7
20 (manager_id)
15
10
Ответ 2
Запрос рекурсивный, он начинается с сотрудника # 1 (вероятно, CEO), а затем рекурсивно печатает всех его подчиненных, а затем всех их подчиненных и т.д. и т.д. (пока все сотрудники не будут напечатаны).
Хорошее объяснение "НАЧАТЬ С СОЕДИНЕНИЕМ" можно найти здесь