Hallo zusammen,
ich brauche einen kleinen Denkanstoß bei folgendem Problem:
Aus einer Tabelle werden Organisationseinheiten [OE] mittels diesem Statement ausgelesen:
Die beiden Subselects berechnen die Anzahl aller untergeordneten OE sowie aller direkten Nachkommen.
Das Ergebnis sieht so aus:
Mit einer weiteren Abfrage lässt sich zu jeder OE die untergeordnete Ebene bestimmen die am meisten OE enthält und diese ausgeben
Ergebnis:
Beide Abfragen für sich funktionieren - jedoch hätte ich das Ganze lieber in einer Abfrage erledigt so dass so etwas herauskommt:
Nur sollte in der letzen Spalte nicht immer 8 stehen da dies das Ergebnis für die erste OE in der Liste ist.
Ich habe probiert meine zweite Abfrage als weitere - also dritte - Subquery in die erste Abfrage zu hängen und dann die Bedingung
durch
zu ersetzen damit er für jeden Datensatz der äußeren Abfrage die Unterabfrage mit den entsprechenden Grenzen des Datensatz ausführt.
Jedoch bekomme ich immer ein "Unknown column k.links" zurück.
Es scheint so als ob die Referenz auf das äußerste links durch mehrfaches verschachteln nicht mehr funktioniert.
Muss man dieses irgendwie durchschleifen damit es klappt - oder ist dies prinzipiell unmöglich?
Viele Grüße!
PS: Ich hoffe ich habe mein Anliegen verständlich rüber bringen können. Ich bessere hier gerne nach falls das hilft.
ich brauche einen kleinen Denkanstoß bei folgendem Problem:
Aus einer Tabelle werden Organisationseinheiten [OE] mittels diesem Statement ausgelesen:
Code:
SELECT k.OE_ID,k.OE_Titel,k.Ebene,k.links,k.rechts,
(SELECT Count(ID) FROM NestedSchema as s WHERE s.links > k.links AND s.rechts < k.rechts) as Kinder,
(SELECT Count(ID) FROM NestedSchema as s WHERE s.links > k.links AND s.rechts < k.rechts AND s.Ebene = k.Ebene +1) as direkteKinder
FROM NestedSchema AS k
WHERE k.links > 1 AND k.rechts < 32
Die beiden Subselects berechnen die Anzahl aller untergeordneten OE sowie aller direkten Nachkommen.
Das Ergebnis sieht so aus:
Mit einer weiteren Abfrage lässt sich zu jeder OE die untergeordnete Ebene bestimmen die am meisten OE enthält und diese ausgeben
Code:
SELECT OE_auf_BuEbene
FROM(
-- Ebene und Anzahl der OE auf dieser
SELECT Ebene,Count(OE_ID) as OE_auf_BuEbene
FROM(
-- alle untergeordneten OE zur aktuellen OE
SELECT n.OE_ID,n.OE_Titel,n.Ebene,n.links,n.rechts
FROM NestedSchema AS n
WHERE n.links > 1 AND n.rechts < 32
) as Liste
GROUP BY Ebene
)as Liste1
WHERE OE_auf_BuEbene = (
-- Maximum aus der Tabelle der Ebenen und ihrer OE Anzahl
SELECT Max(OE_auf_BuEbene)
FROM(
SELECT Ebene,Count(OE_ID) as OE_auf_BuEbene
FROM(
SELECT n.OE_ID,n.OE_Titel,n.Ebene,n.links,n.rechts
FROM NestedSchema AS n
WHERE n.links > 1 AND n.rechts < 32
) as Liste
GROUP BY Ebene
)as Liste1
)
Ergebnis:
Beide Abfragen für sich funktionieren - jedoch hätte ich das Ganze lieber in einer Abfrage erledigt so dass so etwas herauskommt:
Nur sollte in der letzen Spalte nicht immer 8 stehen da dies das Ergebnis für die erste OE in der Liste ist.
Ich habe probiert meine zweite Abfrage als weitere - also dritte - Subquery in die erste Abfrage zu hängen und dann die Bedingung
Code:
WHERE n.links > 1 AND n.rechts < 32
Code:
WHERE n.links > k.links AND n.rechts < k.rechts
Jedoch bekomme ich immer ein "Unknown column k.links" zurück.
Es scheint so als ob die Referenz auf das äußerste links durch mehrfaches verschachteln nicht mehr funktioniert.
Muss man dieses irgendwie durchschleifen damit es klappt - oder ist dies prinzipiell unmöglich?
Viele Grüße!
PS: Ich hoffe ich habe mein Anliegen verständlich rüber bringen können. Ich bessere hier gerne nach falls das hilft.