SQL-rekursive Abfrage für selbstreferenzierende Tabelle (Oracle)
Nehmen wir an, ich habe folgende Beispieldaten:
| Name | ID | PARENT_ID |
-----------------------------
| a1 | 1 | null |
| b2 | 2 | null |
| c3 | 3 | null |
| a1.d4 | 4 | 1 |
| a1.e5 | 5 | 1 |
| a1.d4.f6 | 6 | 4 |
| a1.d4.g7 | 7 | 4 |
| a1.e5.h8 | 8 | 5 |
| a2.i9 | 9 | 2 |
| a2.i9.j10| 10 | 9 |
Ich möchte alle Datensätze auswählen, die mit accountId = 1 beginnen. Das erwartete Ergebnis wäre also:
| Name | ID | PARENT_NAME | PARENT_ID |
-------------------------------------------
| a1 | 1 | null | null |
| a1.d4 | 4 | a1 | 1 |
| a1.e5 | 5 | a1 | 1 |
| a1.d4.f6 | 6 | a1.d4 | 4 |
| a1.d4.g7 | 7 | a1.d4 | 4 |
| a1.e5.h8 | 8 | a1.e5 | 5 |
Momentan kann ich die rekursive Auswahl treffen, aber dann kann ich nicht auf die Daten aus der übergeordneten Referenz zugreifen. Daher kann ich parent_name nicht zurückgeben. Der Code, den ich verwende, ist (angepasst an das vereinfachte Beispiel):
SELECT id, parent_id, name
FROM tbl
START WITH id = 1
CONNECT BY PRIOR id = parent_id
Welche SQL sollte ich für den oben genannten Abruf verwenden?
Zusätzliche Schlüsselwörter für zukünftige Suchende: SQL zur Auswahl hierarchischer Daten, die durch übergeordnete Schlüssel in derselben Tabelle dargestellt werden