Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
CONNECT BY-Klausel
Die CONNECT BY-Klausel gibt die Beziehung zwischen Zeilen in einer Hierarchie an. Sie können CONNECT BY verwenden, um Zeilen in einer hierarchischen Reihenfolge auszuwählen, indem Sie die Tabelle mit sich selbst verbinden und die hierarchischen Daten verarbeiten. Sie können dies beispielsweise verwenden, um rekursiv ein Organigramm zu durchlaufen und Daten aufzulisten.
Hierarchische Abfragen werden in der folgenden Reihenfolge verarbeitet:
Wenn die FROM-Klausel eine Verknüpfung enthält, wird diese zuerst verarbeitet.
Die CONNECT BY-Klausel wird ausgewertet.
Die WHERE-Klausel wird ausgewertet.
Syntax
[START WITH start_with_conditions] CONNECT BY connect_by_conditions
Anmerkung
START und CONNECT sind zwar keine reservierten Wörter, Sie sollten jedoch abgegrenzte Kennungen (doppelte Anführungszeichen) oder AS verwenden, wenn Sie START und CONNECT als Tabellenaliasse in Ihrer Abfrage verwenden, um Fehler während der Laufzeit zu vermeiden.
SELECT COUNT(*) FROM Employee "start" CONNECT BY PRIOR id = manager_id START WITH name = 'John'
SELECT COUNT(*) FROM Employee AS start CONNECT BY PRIOR id = manager_id START WITH name = 'John'
Parameter
- start_with_conditions
-
Bedingungen, die die Stammzeile(n) der Hierarchie angeben.
- connect_by_conditions
-
Bedingungen, die die Beziehung zwischen übergeordneten Zeilen und untergeordneten Zeilen der Hierarchie angeben. Mindestens eine Bedingung muss mit dem unären Operator
PRIOR column = expression -- or expression > PRIOR column
Operatoren
Sie können die folgenden Operatoren in einer CONNECT BY-Abfrage verwenden.
- LEVEL
-
Pseudospalte, die die aktuelle Zeilenebene in der Hierarchie zurückgibt. Gibt 1 für die Stammzeile, 2 für das untergeordnete Element der Stammzeile zurück usw.
- PRIOR
-
Unärer Operator, der den Ausdruck für die übergeordnete Zeile der aktuellen Zeile in der Hierarchie auswertet.
Beispiele
Im Folgenden finden Sie eine CONNECT BY-Abfrage, die die Anzahl der Mitarbeiter zurückgibt, die direkt oder indirekt John unterstellt sind, und zwar auf 4 Ebenen begrenzt.
SELECT id, name, manager_id FROM employee WHERE LEVEL < 4 START WITH name = 'John' CONNECT BY PRIOR id = manager_id;
Nachfolgend das Ergebnis der Abfrage.
id name manager_id ------+----------+-------------- 101 John 100 102 Jorge 101 103 Kwaku 101 110 Liu 101 201 Sofía 102 106 Mateo 102 110 Nikki 103 104 Paulo 103 105 Richard 103 120 Saanvi 104 200 Shirley 104 205 Zhang 104
Die Tabellendefinition für dieses Beispiel lautet wie folgt:
CREATE TABLE employee ( id INT, name VARCHAR(20), manager_id INT );
Im Folgenden werden die Zeilen in die Tabelle eingefügt.
INSERT INTO employee(id, name, manager_id) VALUES (100, 'Carlos', null), (101, 'John', 100), (102, 'Jorge', 101), (103, 'Kwaku', 101), (110, 'Liu', 101), (106, 'Mateo', 102), (110, 'Nikki', 103), (104, 'Paulo', 103), (105, 'Richard', 103), (120, 'Saanvi', 104), (200, 'Shirley', 104), (201, 'Sofía', 102), (205, 'Zhang', 104);
Im Folgenden finden Sie ein Organigramm für Johns Abteilung.