Reflexive Daten in Abfragen

Im Artikel “Reflexive Daten in Tabellen” haben wir gezeigt, wie Sie reflexiv verknüpfte Daten in einer oder mehreren Tabellen verwalten können. Um sinnvoll auf diese Daten zugreifen zu können, müssen Sie entsprechende Abfragen formulieren. Damit ermitteln Sie dann beispielsweise alle Elemente der obersten Hierarchie-Ebene oder auch alle Elemente, die zu einem übergeordneten Element gehören. Die für die beiden im oben genannten Artikel vorgestellten Datenmodelle für Daten in reflexiven Beziehungen benötigen unterschiedliche Abfragen, die wir in diesem Artikel vorstellen.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 2001_ReflexiveDatenInAbfragen.accdb.

Daten aus reflexiven Beziehungen abfragen

Grundsätzlich ist es nicht möglich, alle Daten einer reflexiven Beziehung in einer einzigen Abfrage zu erfassen – zumindest nicht, wenn die Anzahl der Ebenen nicht beschränkt ist und die Daten auch in hierarchischer Form ausgegeben werden sollen.

Wir schauen uns auf den folgenden Seiten die beiden im Artikel Reflexive Daten in Tabellen vorgestellten Modelle für das Speichern von Daten in reflexiven Beziehungen an. Das erste verwendet ein Fremdschlüsselfeld in der gleichen Tabelle, um die Beziehung zwischen den einzelnen Datensätzen herzustellen. Das zweite nutzt eine Verknüpfungstabelle, über welche die übergeordneten und die untergeordneten Datensätze der Tabelle zusammengeführt werden.

Daten der obersten Hierarchie-Ebene ermitteln, eine Tabelle

Wir beginnen mit der Erfassung aller Daten der obersten Hierarchie-Ebene. Im ersten Modell mit der Tabelle tblKategorien verwenden wir eine Abfrage namens qryKategorienEineTabelleEbene1, die alle Felder dieser Tabelle verwendet und dabei prüft, ob der Wert des Feldes ParentKategorieID leer ist (siehe Bild 1).

Entwurf der ersten Abfrage zur Ermittlung der Elemente der ersten Ebene

Bild 1: Entwurf der ersten Abfrage zur Ermittlung der Elemente der ersten Ebene

Wenn wir nun in die Datenblattansicht wechseln, zeigt die Abfrage genau die gewünschten Datensätze an (siehe Bild 2).

Elemente der ersten Ebene

Bild 2: Elemente der ersten Ebene

Daten der obersten Hierarchie-Ebene ermitteln, zwei Tabellen

Um das gleiche Ergebnis für das Modell mit den beiden Tabellen tblKategorie2 und tblKategoriezuordnungen zu erhalten, ziehen wir zunächst die beiden Tabellen tblKategorien2 und tblKategoriezuordnungen in eine neue, leere Abfrage. Dadurch werden die beiden Tabellen mit den beiden Beziehungspfeilen für die beiden vorhandenen Verknüpfungen angezeigt (siehe Bild 3). Diese Abfrage wird keine Ergebnisse liefern, außer Sie legen in der Tabelle tblKategoriezuordnungen Datensätze an, welche den gleichen Datensatz der Tabelle tblKategorien2 als übergeordnete und untergeordnete Kategorie verwenden.

Elemente der ersten Ebene für das Modell mit Verknüpfungs-tabelle

Bild 3: Elemente der ersten Ebene für das Modell mit Verknüpfungs-tabelle

Also entfernen wir zunächst einen der beiden Beziehungspfeile für den Kontext dieser Abfrage. Aber welchen Wir wollen ja die Datensätze der Tabelle tblKategorien2 ermitteln, für die es kein übergeordnetes Element gibt. Also müssen wir herausfinden, für welche Datensätze der Tabelle tblKategorien2 es keinen Datensatz in der Tabelle tblKategoriezuordnungen gibt, dessen Feld ChildKategorieID mit dem Primärschlüsselfeld des Datensatzes aus tblKategorien2 verknüpft ist.

Dazu behalten wir also die Verknüpfung zwischen dem Feld ChildKategorieID und KategorieID bei und löschen den anderen Beziehungspfeil. Wir ziehen die beiden Felder KategorieID und Kategorie der Tabelle tblKategorien2 und das Feld ChildKategorieID der Tabelle tblKategoriezuordnungen in das Entwurfsraster der Abfrage.

Dann stellen wir als Kriterium für das Feld ChildKategorieID den Wert Ist Null ein. Die Abfrage soll also nur Ergebnisse liefern, für die es keinen Datensatz in der Tabelle tblKategoriezuordnungen gibt, die über das Feld ChildKategorieID mit der Tabelle tblKategorien2 verknüpft sind.

Allerdings werden dann im aktuellen Zustand überhaupt keine Datensätze angezeigt, denn wenn ChildKategorieID nicht mit dem Feld KategorieID eines Datensatzes der Tabelle tblKategorien2 verknüpft ist, dann kann diese auch keine Datensätze der Tabelle tblKategorien2 liefern.

Also stellen wir die Beziehungseigenschaften, die wir durch einen Doppelklick auf den Beziehungspfeil öffnen, noch so ein, dass auch solche Datensätze angezeigt werden, für die es zwar einen Datensatz in der Tabelle tblKategorien2 gibt, aber nicht in der Tabelle tblKategoriezuordnungen (siehe Bild 4).

Elemente der ersten Ebene für das Modell mit Verknüpfungs-tabelle, optimierte Version

Bild 4: Elemente der ersten Ebene für das Modell mit Verknüpfungs-tabelle, optimierte Version

Wechseln wir nun in die Datenblattansicht, erhalten wir das gleich Ergebnis wie für die Version ohne Verknüpfungstabelle (siehe Bild 5).

Elemente der ersten Ebene für die Version mit der Verknüpfungstabelle

Bild 5: Elemente der ersten Ebene für die Version mit der Verknüpfungstabelle

Untergeordnete Elemente referenzieren ohne Verknüpfungstabelle

Wenn Sie nun beispielsweise alle Elemente per Abfrage ermitteln wollen, die der Kategorie mit dem Wert 1 im Feld KategorieID untergeordnet sind, benötigen Sie eine etwas anders formulierte Tabelle. Diese sieht im Entwurf wie in Bild 6 aus.

Abfrage aller Kategorien, die der Kategorie mit dem Wert 1 im Feld KategorieID untergeordnet sind

Bild 6: Abfrage aller Kategorien, die der Kategorie mit dem Wert 1 im Feld KategorieID untergeordnet sind

Wir legen also für das Feld ParentKategorieID als Vergleichswert den Primärschlüsselwert der übergeordneten Kategorie fest. Das Ergebnis sieht wie in Bild 7 aus.

Ausgabe der Kategorien, die der Kategorie mit dem Primärschlüsselwert 1 untergeordnet sind

Bild 7: Ausgabe der Kategorien, die der Kategorie mit dem Primärschlüsselwert 1 untergeordnet sind

Untergeordnete Elemente referenzieren mit Verknüpfungstabelle

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar