Je nachdem, wie Sie die Abfrage schreiben, kann es sinnvoll sein, die Anzahl der Rekursionsstufen zu beschränken. Mit der Beschränkung der Anzahl der Stufen können Sie beispielsweise nur die obersten Managementebenen zurückgeben, was aber möglicherweise einige Mitarbeiter ausschließt, wenn die Hierarchie verzweigter ist, als Sie angenommen haben. Wenn Sie für die Anzahl der Stufen keine Beschränkung festlegen, wird garantiert, dass kein Mitarbeiter ausgeschlossen wird, aber es kann zu unendlichen Rekursionen führen, falls die Ausführung Schleifen erfordert, wenn z.B. ein Mitarbeiter direkt oder indirekt sich selbst unterstellt ist. Das könnte in der Managementhierarchie einer Firma eintreten, wenn beispielsweise ein Angestellter der Firma auch im Vorstand sitzt.
Die folgende Abfrage zeigt, wie Sie die Mitarbeiter anhand ihrer Managementebene auflisten. Ebene 0 stellt Mitarbeiter ohne Vorgesetzte dar. Ebene 1 stellt Mitarbeiter dar, die direkt einem Vorgesetzten der Ebene 0 unterstellt sind, Ebene 2 stellt Mitarbeiter dar, die direkt einem Vorgesetzten der Ebene 1 unterstellt sind, und so weiter.
WITH RECURSIVE manager ( EmployeeID, ManagerID, GivenName, Surname, mgmt_level ) AS ( ( SELECT EmployeeID, ManagerID, -- initial subquery GivenName, Surname, 0 FROM Employees AS e WHERE ManagerID = EmployeeID ) UNION ALL ( SELECT e.EmployeeID, e.ManagerID, -- recursive subquery e.GivenName, e.Surname, m.mgmt_level + 1 FROM Employees AS e JOIN manager AS m ON e.ManagerID = m.EmployeeID AND e.ManagerID <> e.EmployeeID AND m.mgmt_level < 20 ) ) SELECT * FROM manager ORDER BY mgmt_level, Surname, GivenName; |
Die Bedingung innerhalb der rekursiven Abfrage, mit der die Managementebenen auf weniger als 20 beschränkt wird, ist eine wichtige Vorsichtsmaßnahme. Sie verhindert eine unendliche Rekursion, falls die Tabellendaten eine Schleife enthalten.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |