3.10.3 Nummerierung von Abfrageergebnissen mit
eingeschränkten Ergebnismengen
3.11 Reflexive 1:n-Beziehungen
In Kapitel 2, Abschnitt 2.5.7, »Reflexive Beziehungen«, haben Sie die Grundlagen zu reflexiven Abfragen erhalten.
Die Anzeige und Behandlung der Daten reflexiver Beziehungen mit Abfragen ist relativ eingeschränkt, da es sich bei Access-SQL nicht um eine prozedurale Sprache handelt.
Die meisten Aufgaben in Zusammenhang mit reflexiven Beziehungen lassen sich nur mit VBA und passenden rekursiven Funktionen erledigen.
Für einige Aufgaben ist jedoch auch eine Abfrage geeignet. Wenn Sie etwa ermitteln möchten, in welcher Ebene der Hierarchie sich ein Mitarbeiter befindet, können Sie die Abfrage aus Abbildung 3.45 verwenden. Wichtig ist dabei, dass Sie jeweils einen LEFT JOIN zwischen den Tabellen einrichten.
Das Feld Ebene enthält den folgenden Ausdruck:
Ebene: Anzahl([tblMitarbeiterVorgesetzter].[VorgesetzterID]) +Anzahl([tblMitarbeiterVorgesetzter_1].[VorgesetzterID]) +Anzahl([tblMitarbeiterVorgesetzter_2].[VorgesetzterID]) +1
Die Abfrage geht von der Tabelle tblMitarbeiterVorgesetzter aus. Die weiteren Tabellen sind Kopien der ersten Tabelle, die Sie durch wiederholtes Ziehen der Tabelle tblMitarbeiterVorgesetzter zum Abfrageentwurf hinzufügen.
Jeder Anzahl(...)-Ausdruck ermittelt, ob das Feld VorgesetzterID in den verknüpften Tabellen einen Wert enthält. Ist das der Fall, liefert die Anzahl-Funktion den Wert 1.

Abbildung 3.45: Ermittlung der Anzahl der Hierarchieebenen eines Mitarbeiters
Abbildung 3.46 hilft beim Verständnis dieser Abfrage. Die letzten drei Spalten sind im Abfrageentwurf nicht zu sehen. Sie enthalten den direkten Vorgesetzten, den Vorgesetzten dieses Vorgesetzten und dessen Vorgesetzten.
Der Nachteil solcher Abfragen ist, dass Sie diese in der Regel schlecht statisch anlegen können, da Sie nie wissen, ob nicht einmal eine Ebene hinzukommt oder wegfällt.
Daher sollten Sie Vorgänge im Zusammenhang mit reflexiven Beziehungen in der Regel mit VBA und rekursiven Funktionen durchführen.

Abbildung 3.46: Hierarchieebene der Mitarbeiter und Anzeige der jeweiligen Vorgesetzten
Nächster Abschnitt:
3.12 Reflexive m:n-Beziehungen
|