Access: Lücken finden - Verknüpfungstricks mit Abfragen
Eine Liste ohne Vergleichstabelle: Fiktive Tabellen
Fiktive Tabellen
Auf dieser Seite
Mit Bild
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.
Mit Bild
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".
Mit Bild
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.
Mit Bild
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:
Mit Bild
Die Inhalte der Tabelle tabZehn
Mit Bild
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:
Mit Bild
Die Abfrage qryZehnMalZehn
Mit Bild
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:
Mit Bild
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;
Mit Bild
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:
Mit Bild
Das Ergebnis des Kreuzprodukts sind 100 Datensätze
Mit Bild
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:
Mit Bild
Der Abfrage-Entwurf für den Vergleich mit fiktiven 100 Zahlen
Mit Bild
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.