оракул рекурсивный запрос сотрудников под менеджером, давая менеджеру один уровень вниз - PullRequest
2 голосов
/ 29 июля 2011

У меня есть таблица сотрудников, которая открывается с помощью employeeid = managerid

В моем наборе результатов я хотел бы получить {employeeid, 1-level-down-from-request}

поэтому, учитывая

Employeeid - Managerid
Bob - Null
Jill - Bob
John - Bob
Suzy - Jill
Shannon - Jill
Shawn - Jill
Ron - John
Rick - John
Xavier - Shawn

, если бы я выполнил запрос на Бобе, мы получили бы

Shannon - Jill
Shawn - Jill
Ron - John
Rick - John
Xavier - Jill

уведомление о том, что Ксавье пошел к Джилл, а не к Шону, потому что Джилл - старший менеджер Ксавье (на шаг ниже)Боб)

1 Ответ

3 голосов
/ 29 июля 2011

Самым простым подходом, вероятно, было бы создание самостоятельного объединения

SELECT employee.employeeId,
       employee.managerId
  FROM table_name mgr,
       table_name subordinate,
       table_name employee
 WHERE mgr.managerId = subordinate.employeeId
   AND subordinate.managerId = employee.managerId
   AND mgr.employeeId = 'Bob'

Однако было бы более эффективным и более общим построить иерархический запрос. Что-то вроде

SELECT *
  FROM (SELECT employeeId, managerId, level lvl
          FROM table_name
         START WITH employeeId = 'Bob'
       CONNECT BY prior employeeId = managerId)
 WHERE lvl = 3

Очевидно, было бы намного проще изменить последний запрос, чтобы изменить, хотите ли вы прямые отчеты или отчеты второго уровня или какой-либо другой уровень иерархии. И это, как правило, будет более эффективным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...