2 Stimmen

Oracle rekursive Abfrage von Mitarbeitern unter dem Manager, die dem Manager eine Ebene tiefer zugeordnet sind

Ich habe eine Mitarbeitertabelle, die über employeeid = managerid unloops

Was ich in meiner Ergebnismenge haben möchte, ist {employeeid, 1-level-down-from-request}

also gegeben

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

Wenn ich die Abfrage für Bob ausführe, erhalten wir

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

Beachten Sie, dass Xavier zu Jill und nicht zu Shawn gegangen ist, weil Jill Xaviers Vorgesetzte ist (eine Stufe unter Bob).

3voto

Justin Cave Punkte 220606

Der einfachste Ansatz wäre wahrscheinlich ein Self-Join

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'

Es wäre jedoch effizienter und allgemeiner, eine hierarchische Abfrage zu erstellen. Etwas wie

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

Es wäre natürlich viel einfacher, die letztgenannte Abfrage zu ändern, um zu bestimmen, ob Sie direkte Berichte oder Berichte der zweiten Ebene oder einer anderen Hierarchieebene wünschen. Außerdem ist sie im Allgemeinen effizienter.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X