Access: Lücken finden - Verknüpfungstricks mit Abfragen

Eine Liste ohne Vergleichstabelle: Fiktive Tabellen

Bisher noch keine Bewertungen für diesen Artikel.

Fiktive Tabellen

Auf dieser Seite

Sie können auch mit den Bordmitteln von Access ohne Programmierung Tabellen erzeugen, die nirgends gespeichert sind. Damit erhalten Sie die benötigte Datensatzmenge ohne viel Aufwand.

Wenn Sie also keine Tabelle mit so vielen Daten speichern wollen, wie erhalten Sie diese dann? Ganz einfach: sie werden künstlich in einer Abfrage erzeugt. Die Technik dazu ist meistens ein Versehen, hat aber einen offiziellen Namen, nämlich "Kreuzprodukt".

Das ist nichts anderes als eine Abfrage mit zwei Tabellen ohne Verknüpfung. Dann nimmt Access jeden Datensatz aus der einen Tabelle und kombiniert ihn mit jedem Datensatz aus der anderen Tabelle. Mit 12 Datensätzen hier und 15 Datensätzen dort ergibt das schon mal 180 Datensätze insgesamt. Wohlgemerkt fiktive Datensätze, denn tatsächlich gespeichert waren ja nur (12+15=) 27 Datensätze.

Es braucht also nur noch eine geeignete Tabelle und eine trickreiche Berechnung, um mal eben viele Zahlen zu erzeugen. Beginnen Sie mit der Tabelle tblZehn und den folgenden Inhalten:

53469_tabzehn.png

Die Inhalte der Tabelle tabZehn

Die Tabelle tabZehn enthält ein einziges Long-Zahlenfeld mit den Wert von 1 bis 10. Diese fügen Sie nun zweimal(!) in eine neue Abfrage ein:

53470_qryzehnmalzehn.png

Die Abfrage qryZehnMalZehn

Dadurch enthält die Abfrage zwei Tabellen als Datenquelle, von denen eine automatisch zur Unterscheidung mit _1 ergänzt wird. Der wesentliche Trick besteht in der Formel, welche von der einen Tabelle die 10er- und von der anderen Tabelle die 1er-Stellen errechnet:

SELECT (tblZehn.lngZahl*10+tblZehn_1.lngZahl)-10 AS Neu
FROM tblZehn, tblZehn AS tblZehn_1
ORDER BY (tblZehn.lngZahl*10+tblZehn_1.lngZahl)-10;

Die die Werte schon bei 1 beginnen, muss vom Ergebnis nochmals 10 abgezogen werden. Diese Berechnung ließe sich bei sehr großen Zahlen in der Geschwindigkeit noch ein wenig optimieren, aber so reicht es erst einmal. Im Ergebnis haben Sie nun tatsächlich eine Liste aller Zahlen bis 100:

53471_53471_qryzehnmalzehnergebnis.jpg

Das Ergebnis des Kreuzprodukts sind 100 Datensätze

Diese Zahlen können Sie nun mit der Tabelle tblZwei vergleichen, wenn Sie alle Lücken im Bereich bis 100 wissen wollen. Dabei lassen sich nun wieder die obigen Grundsätze von Outer Join und Ist Null-Filter anwenden:

53472_qrylueckenfindenzehn.png

Der Abfrage-Entwurf für den Vergleich mit fiktiven 100 Zahlen

Mit dieser Abfrage qryLueckenFindenZehn listet Access alle Lücken im Bereich bis 100 auf, die in der Tabelle tblZwei fehlen, ohne dass irgendwo so viele Daten gespeichert werden müssen.

Das Konzept der fiktiven Zahlen lässt sich ohne Probleme auf beliebig große Zahlenbereiche ausdehnen, indem Sie in qryZehnMalZehn die Tabelle tblZehn erneut einfügen und damit den Zahlenbereich bis 1000 abdecken und so weiter.