dedlfix: Baumstruktur mit rekursiver Query auslesen

Beitrag lesen

Tach!

Leider liest sie mir den Baum nur teilweise aus (wenn am Verweis wieder ein Verweis hängt kommt der nicht mit).

Bitte schildere mal konkret, an welcher Stelle das Problem auftritt. Was konkret erwartest du und was erhältst du stattdessen? Und gibt es vielleicht eine Fehlermeldung (die du eventuell nicht abgefragt hast)?

Manchmal hilft es auch anderen oder so vor sich hin, mal in Worte zu fassen, was genau das Gebilde tut oder tun soll und das möglichst so detailiert, dass der (imaginäre) Andere das ohne großes Vorwissen verstehen kann. Es soll dabei schon vorgekommen sein, dass man dann ins Stocken gerät, weil eine Sache unklar ist, und man so auf das eigentliche Problem gestoßen ist.

Funktioniert die CTE-Abfrage denn erstmal grundlegend ohne die Erweitung um deine Spezialbedinung? Und funktioniert das Ermitteln der Daten gemäß der Spezialbedingung, wenn man das mal unabhängig testet ohne den Aspekt der verschachtelten Struktur dazuzunehmen, sprich: als Extra-Query ohne die CTE? Es ist günstig, wenn man die Aufabenstellung in kleine unabhängige Teileinheiten herunterbrechen kann, sie einzeln testet und erst dann zusammenfügt.

Gibt es allenfalls bessere Möglichkeiten die Datenstruktur aufzusetzen?

Für die Struktur fällt mir als Alternative nur das Nested-Sets-Model ein. Das ist komplexer aufgebaut und nicht so einfach zu pflegen, dafür bietet es eine Menge Möglichkeiten zum Formulieren von Abfragen nach Teilmengen. Aber das ist vielleicht für deinen Fall nicht notwendig. Wenn man die Abfragevielfalt nicht braucht, muss man sich nicht mit der Komplexität rumschlagen. Dann reichen auch die Möglichkeiten der Abfrage mithilfe der CTE.

Was ich mir aber als Lösung vorstellen kann, wäre, die Ermittlung eines Nodes in eine View oder Table-Valued User-Defined Function auszulagern. Oder wenn nur ein einzelner Wert benötigt wird (z.B. eine ID), dann tuts auch eine einfache Function. Jedenfalls sollte diese den gewünschten Datensatz ermitteln und dabei entweder den direkten Datensatz oder den referenzierten zurückgeben (oder dessen ID). Das kann man dann auch schön separat testen.

dedlfix.