verwendetes Datenbanksystem: SQL Server Management Studio 2008
Hallo Leute,
ich versuche die Datensätze aus meiner Tabelle hierarchisch anzeigen zu lassen. Habe schon ein wenig gegoogelt (Hierarchische Datenbankanfragen) doch es klappt noch nicht so ganz. Habe es mit folgendem Code probiert:
select level ,categorie_ID, LPAD(' ',2*(LEVEL-1)) || description description, group_ID
from Catalogue
start with categorie_ID=1
connect by prior categorie_ID = group_ID;
Doch es wird das Level, LPAD Start With nicht erkannt...
Habt ihr eine Idee wie ich es stattdessen angezeigt bekommen?
Ich hab die starke vermutung es gibt connect nicht in mssql
google mal nach UNION/UNION ALL
Hallo,
das sieht nach Oracle aus und das geht mit MS SQL nicht. Schau mal hier: Rekursive Abfragen mit MS SQL
Grüße
**:::
Hallo,
das sieht nach Oracle aus und das geht mit MS SQL nicht. Schau mal hier: Rekursive Abfragen mit MS SQL
Grüße
Ich hab mich da mal etwas eingelesen...und meine Anfrage sieht nun wie folgt aus:
With Hierachy(categorie_ID, description, group_ID, Level)
AS
(
SELECT categorie_ID, group_ID, description, 0 AS Level
FROM Catalogue x
WHERE x.categorie_ID = 'QK 50230365'
UNION ALL
SELECT x.categorie_ID, x.group_ID, x.description, y.Level+1
FROM Catalogue x
INNER JOIN Hierachy y
ON x.group_ID = y.categorie_ID
)
SELECT categorie_ID, group_ID, description
FROM Hierachy
WHERE Level >0
Funktioniert auch, aber...ich hab ne Endlosschleife 😦 und ich weiß nicht warum?
So wie ich das sehe, zählt er den Level Wert immer hoch, obwohl er bei manchen zurückgehen müsste, weil dieser in der Hierarchie weiter oben steht...
Hallo,
ohne Kenntnisse über deine DB-Struktur kann man schlecht was sagen. Und so eine Abfrage kann auch nicht in eine Endlosschleife sich entarten, das geht nicht, es sei denn während der Abfrage fütterst du die Tabellen unaufhörlich mit Daten.
Grüße
**:::
Also in der Tabelle Catalogue sind 181 Datensätze.
Wenn ich den Wert der MAXRECURSION mal hochstelle...sehe ich das mir weit über 10.000 Datensätze dazu angezeigt werden. Deshalb meine Vermutung, dass es sich um eine Endlosschleife handelt. Bei manchen Datensätzen muss ja ein Level Schritt zurück gemacht werden. Wird es aber leider nicht...
Wie gesagt, ohne Datenmodell schwer erkennbar. Hast du vielleicht irgendeinen Parameter für den JOIN vergessen, sodass deine Zeilen mehrfach ausgegeben werden?
Also in der Tabelle Catalogue sind 181 Datensätze.
Wenn ich den Wert der MAXRECURSION mal hochstelle...sehe ich das mir weit über 10.000 Datensätze dazu angezeigt werden. Deshalb meine Vermutung, dass es sich um eine Endlosschleife handelt. Bei manchen Datensätzen muss ja ein Level Schritt zurück gemacht werden. Wird es aber leider nicht...
Es könnte ja sein, dass deine Tabelle sehr viele Verschachtelungsdaten enthält, so dass die Ergebnismenge entsprechend explodiert.
**:::