Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Striving_Tom am Oktober 10, 2017, 17:22:54

Titel: Neu hinzugekommene Datensätze bzw. entfallene Datensätze finden
Beitrag von: Striving_Tom am Oktober 10, 2017, 17:22:54
Hallo zusammen,

ich bekomme regelmäßig Tabellen mit Datensätzen, die ich in Access importiere. Diese Tabellen enthalten immer einen "Gesamtdatenbestand". Die Tabellen enthalten auch immer einen Primärdatenschlüssel, der für jeden Datensatz eindeutig ist und unverändert bestehen bleibt, so dass sich die Tabellen darüber auswerten lassen.

In diesen Tabellen suche ich nun nach den Veränderungen.

Mit INNER JOIN kann ich herausfinden, welche Datensätze in BEIDEN Datenbeständen enthalten sind. Ich suche aber nun genau die "Umkehrungen" davon.

Bisher haben meine Versuche, eine passende SQL-Abfrage zu formulieren leider nicht zu den erwünschten Ergebnissen geführt.

Ich hoffe auf Eure Anregungen. Schon mal vielen Dank, Thommy.

Titel: Re: Neu hinzugekommene Datensätze bzw. entfallene Datensätze finden
Beitrag von: DF6GL am Oktober 10, 2017, 17:31:31
Hallo,

hier z. B. findest Du die Lösung:

http://www.donkarl.com/?FAQ3.16
Titel: Re: Neu hinzugekommene Datensätze bzw. entfallene Datensätze finden
Beitrag von: ebs17 am Oktober 10, 2017, 18:02:39
Zitatdie ich in Access importiere
Ist das nicht die Aufgabe?
Was genau nutzt Dir ein Ansehen von Datensätzen? Möchtest Du händisch etwas arbeiten?
=> Grundlagen - SQL ist leicht (4) - Aktualisierung einer Tabelle (https://is.gd/Gkdb3z)
Titel: Re: Neu hinzugekommene Datensätze bzw. entfallene Datensätze finden
Beitrag von: Striving_Tom am Oktober 10, 2017, 18:11:40
Danke für die schnellen Antworten !  :)

@ebs17
Hintergrund:  Der "Datenlieferant" ist nur in der Lage, zu verschiedenen Zeitpunkten den dann jeweils aktuellen Gesamtdatenbestand zu liefern. Da aber neue Datensätze und entfallene Datensätze im Sinne von "Zugängen" und "Abgängen" zu dokumentieren sind, muss ich die Veränderungen aus den verschiedenen Gesamtdatenbeständen selbst herausfinden.

@DF6GL
Ich habe gerade versucht, das Beispiel auf meinen Fall anzupassen, hatte aber leider noch keinen Erfolg damit. In meiner Versuchs-Datei ergab die angepasste Anfrage trotz Unterschieden in der alten zur neuen Tabelle keinen einzigen Datensatz. Ich versuche noch mal, meinen Wissensstand bzw. meine "Erkenntnisse" kurz zu skizzieren.

Situation:Grundsätzliche Ergebnisse mittels verschiedener Arten von "JOIN"
Ich suche aber eine Abfragestruktur, die mir nur den einen entfallenen Datensatz (12) und die Abfragestruktur, die mir nur den einen neuen Datensatz (17) liefert.

Viele Grüße
Thommy
Titel: Re: Neu hinzugekommene Datensätze bzw. entfallene Datensätze finden
Beitrag von: Lachtaube am Oktober 10, 2017, 19:12:58
Du benötigst anscheinend einen Full Outer Join auf die beiden Tabellen.
SELECT a.*, n.*
FROM   ALT a
       INNER JOIN NEU n
               ON a.ID = n.ID
UNION ALL
SELECT a.*, n.*
FROM   ALT a
       LEFT JOIN NEU n
              ON a.ID = n.ID
WHERE  n.ID IS NULL
UNION ALL
SELECT a.*, n.*
FROM   NEU n
       LEFT JOIN ALT a
              ON n.ID = a.ID
WHERE  a.ID IS NULL;
Titel: Re: Neu hinzugekommene Datensätze bzw. entfallene Datensätze finden
Beitrag von: Striving_Tom am Oktober 11, 2017, 11:23:07
Hallo zusammen,

ich habe es jetzt verstanden. Meine Tabellen heißen Tab_alt und Tab_neu und haben jeweils ein Feld "ID".

Mit folgendem Code erhalte ich nur die entfallenen Datenstätze:

SELECT Tab_alt.*
FROM Tab_alt
   LEFT JOIN Tab_neu
      ON Tab_alt.ID = Tab_neu.ID
WHERE Tab_neu.ID Is Null;


Mit folgendem Code erhalte ich nur die neu hinzugekommenen Datensätze (Das sollte sich auch über eine passende RIGHT JOIN-Konstruktion erreichen lassen.)

SELECT Tab_neu.*
FROM Tab_neu
   LEFT JOIN Tab_alt
      ON Tab_alt.ID = Tab_neu.ID
WHERE Tab_alt.ID IS NULL;


Jetzt habe ich auch verstanden, dass es einen direkten "Full Outer Join-Befehl" in Access nicht gibt, dieser aber durch folgenden Code ersetzt werden kann, so dass sich eine Tabelle erzeugen lässt, die den "Gesamtdatenbestand" enthält. (Dieses ist für mich auch sehr hilfreich, da für Dokumentats- und /Nachprüfbarkeitszwecke Datensätze nur "virtuell" gelöscht werden (d.h. nur als "gelöscht" markiert werden, aber im Datenbestand bleiben. Außerdem ist so eine "Reaktivierung" von Datensätzen ebenfalls möglich.

Bei mir funktioniert für die Zusammenstellung aller Datensätze folgender Code:

SELECT Tab_alt.*, Tab_neu.*
FROM   Tab_alt
       INNER JOIN Tab_neu
               ON Tab_alt.ID = Tab_neu.ID
UNION ALL
SELECT Tab_alt.*, Tab_neu.*
FROM   Tab_alt
       LEFT JOIN Tab_neu
              ON Tab_alt.ID = Tab_neu.ID
WHERE  Tab_neu.ID IS NULL
UNION ALL SELECT Tab_alt.*, Tab_neu.*
FROM Tab_alt
     RIGHT JOIN Tab_neu
         ON Tab_alt.ID = Tab_neu.ID
WHERE Tab_alt.ID IS NULL;


Vielen Dank an Lachtaube und DF6GL !!!
Thommy