Entwickler-Ecke

Datenbanken - SQL: Abfrage rekursiv


stoermi - Do 27.04.06 14:37
Titel: SQL: Abfrage rekursiv
Hallo!
Ich habe folgendes Problem:
eine Tabelle in der Form:

element | parent | value
-----------------------------

Jetzte möchte ich eine Abfrage per SQL machen, die mir bei gegebenem 'parent' alle 'elemente' liefert, sowie deren Kinder, und deren Kinder, usw.

Wie kann ich das bestmöglich realisieren? Danke für eure Tipps!!!

mfg

Ein Unwissender


mkinzler - Do 27.04.06 14:56

Mit einem normalen Query wird das wohl nicht gehen. Wäre ein Fall für eine SP. Was für eine Datenbank wird eingesetzt?


Dominique - Mo 08.05.06 14:21

Eine Ausgabe des Gesamtbaums, bestimmung der Tiefe, etc. per SQL ist in diesem Tabellen-Modell (Vater-Zeiger) nicht möglich! Es gibt eine weitere Möglichkeit Bäume in Tabellen zu packen: Nested Set Modell [http://ffm.junetz.de/members/reeg/DSP/node11.html#SECTION04344000000000000000]
- ist aber wesentlich schwerer zu füllen, Löschen und verschieben ist im Nested-Set-Modell auch nicht ohne...

Ich nutze für Bäume überwiegend Vater-Zeiger und lese den Baum dann in einer rekursiven Funktion. Bei einer geringen Tiefe (bis zu 10 Ebenen) klappt das bisher ganz gut. Der Nachteil ist, daß ich für jeden neuen Funktionsaufruf einen neue Query erzeuge.

Viel Erfolg,
Dominique


Delete - Mo 08.05.06 21:32

mit welcher datenbank arbeitest du? mit oracle, gibts glaub ich seit ora6 da einen sql befehl, mit dem du genau das machen kannst was du beschrieben hast.


alzaimar - Mo 08.05.06 22:15

Mit SQL-2005 (mit 2000 habe ich es noch nicht probiert) kann man eine Tabellenvariable definieren (mit einem select auf deine Tabelle), auf die rekursiv Bezug genommen wird. Nachzulesen bei http://www.sqlcentral.com, irgendwo in den Archiven (Stichwort: Recursive Query).