Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Access höchster Wert aus zwei Tabellen suchen





Frage

Ich habe zwei vom Aufbau her identische Tabellen eine Aktuelle Tabelle und eine Archivtabelle (alte Datensätze). Nun muss ich aus einem Feld in beiden Tabellen den höchsten Wert suchen, wobei der höchste Wert in der aktuellen und auch in der Archivtabelle sein kann. Wie komme ich am unkompliziertesten an den Wert?

Antwort 1 von mapet

Hallo

Erstelle ein Abfrage mit beiden Tabellen.
Nimm bei beiden das Zielfeld - gehe auf Gruppieren und wähle bei beiden maximum
Dann musst Du nur noch zwei Werte vergleichen

mapet

Antwort 2 von ElBobbele

Hallo mapet!

Mit der Lösung könntest du bebe ein dickes Ei ins Nest legen. Wenn du zwei Tabellen in eine Abfrage hinzufügst und keine Beziehung definierst, dann kombiniert die Abfrage jeden Datensatz aus der einen Tabelle mit jedem Datensatz aus der anderen Tabelle. Erst dann wird Max() auf der Datenmenge ausgeführt.

Enthalten beide Tabellen jeweils 10.000 Datensätze, dann sind das 10.000 x 10.000 = 100.000.000. Über diese Datenmenge laufen dann zwei Max-Funktionen. Ich habe das Szenario mal ausprobiert und komme dabei auf eine Abfragedauer von 2 Min 29 Sek.

Ich würde deswegen zwei einzelne Abfragen empfehlen, die ihrerseits mit Max() den höchsten Wert ermitteln. Beide Abfragen sind Teil einer anschliessenden Union-Abfrage, über die dann wieder ein Max() läuft. Bei der gleichen Datenmenge braucht diese Abfrage bei mir annähernd 0,0 Sekunden:


SELECT Max(TempZahl) AS Ergebnis
FROM (
         SELECT Max(Zahl) AS TempZahl
         FROM tblAktuell
         UNION 
         SELECT Max(Zahl) AS TempZahl
         FROM tblArchiv
     ) AS Temp;


Gruss
El Bobbele

Antwort 3 von mapet

Hallo
@bobbele sorry war ein grober schnitzer, ist eben ein Grundsatz von mir dass die Tabellen verknüpft sein müssen (von ganz wenigen besonderheiten abgesehen. sorry
mapet

Antwort 4 von ElBobbele

Hi mapet!

Dank deines "Schnitzers" wurde ein wichtiger Punkt zur Abfrage-Performance angesprochen. Wenn jetzt einige Supportnet-Nutzer von den Erläuterungen profitieren können, dann war es das wert. :-)

Gruss
El Bobbele

Antwort 5 von bebe

Hallo el bobbele

vielen Dank für die Hilfe.
Ich habe dadurch das Problem gelöst, allerdings hat mein Access die verschachtelte From Anweisung nicht akzeptiert; es hat die runde Klammer immer durch eine eckige Klammer ersetzt und dann eine Fehlermeldung auf die Select Anweisung gebracht. Habe ich etwas falsch gemacht?

Ich habe nun die beiden Höchstwerte der einzelnen Tabellen ermittelt, über die Union Abfrage miteinander verbunden und über eine zusätzliche Abfrage den Maximalwert ermittelt.


Antwort 6 von ElBobbele

Hallo bebe!

Die eckigen Klammern sehen sicher so aus:

sqlsqlsql [ sqlsqlsql ]. AS Temp sqlsqlsql

Access stellt i.d.R. von runden Klammern auf eckige Klammern um (spätestens beim Speichern?). Wenn dann innerhalb der Klammern ein Tabellen- oder Feldnamen mit Leerzeichen enthalten ist, dann müsste dieser Name ebenfalls in eckige Klammern gesteckt werden. Mit verschachtelten Klammern kann Access aber nicht umgehen.

Achte deswegen darauf, dass diese Namen keine Leerzeichen enthalten, dann sind die Extra-Klammern nicht nötig.

Im Zweifel spricht nichts dagegen, die Unterabfragen als eigenständige Abfragen abzuspeichern und sie dann als Unterabfragen einzubinden, dann klappt das garantiert.

Gruss
El Bobbele