Reflexive Daten in Abfragen

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

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.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar