collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 54
  • Punkt Versteckte: 1
  • Punkt Mitglieder: 3
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 13695
  • stats Beiträge insgesamt: 62165
  • stats Themen insgesamt: 8469
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 16
  • stats Am meisten online: 415

Autor Thema: Neu hinzugekommene Datensätze bzw. entfallene Datensätze finden  (Gelesen 71 mal)

Offline Striving_Tom

  • Newbie
  • Beiträge: 9
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.
  • Wie muss die Grundstruktur einer SQL-Abfrage aussehen, mit der ich herausfinden kann, welche Datensätze in der älteren Tabelle, aber nicht in der neueren Tabelle enthalten sind, d.h. welche Datensätze gelöscht bzw. entfallen sind
  • Wie muss die Grundstruktur einer SQL-Abfrage aussehen, mit der ich herausfinden kann, welche Datensätze in der neueren Tabelle, aber nicht in der älteren Tabelle enthalten sind, d.h welche Datensätze neu hinzugekommen sind?

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

 


Offline ebs17

  • Access-Meister
  • ***
  • Beiträge: 770
Re: Neu hinzugekommene Datensätze bzw. entfallene Datensätze finden
« Antwort #2 am: Oktober 10, 2017, 18:02:39 »
Zitat
die 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
Mit freundlichem Glück Auf!

Eberhard
 

Offline Striving_Tom

  • Newbie
  • Beiträge: 9
Re: Neu hinzugekommene Datensätze bzw. entfallene Datensätze finden
« Antwort #3 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:
  • Eine alte Tabelle enthält sechs Datensätze mit den über alle Tabellenversionen eindeutigen IDs 11, 12, 13, 14, 15, 16
  • Eine neue Tabelle enthält sechs Datensätze mit den IDs 11, 13, 14, 15, 16, 17.
Grundsätzliche Ergebnisse mittels verschiedener Arten von "JOIN"
  • Mit FULL (OUTER) JOIN kann ich die Gesamtheit aller sieben Datensätze erhalten, die ENTWEDER in der alten ODER in der neuen Tabelle enthalten sind. (11, 12, 13, 14, 15, 16, 17).
  • Mit INNER JOIN kann ich alle fünf Datensätze erhalten, die SOWOHL in der alten ALS AUCH in der neuen Tabelle enthalten sind. (11, 13, 14, 15, 16)
  • Mit LEFT JOIN erhalte ich die sechs Datensätze aus der alten Tabelle (11, 12, 13, 14, 15, 16)
  • Mit RIGHT JOIN erhalte ich die sechs Datensätze aus der neuen Tabelle (11, 12, 13, 14, 15, 16, 17)

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
 

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 727
Re: Neu hinzugekommene Datensätze bzw. entfallene Datensätze finden
« Antwort #4 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;
Grüße von der (⌒▽⌒)
 
Folgende Mitglieder bedankten sich: Striving_Tom

Offline Striving_Tom

  • Newbie
  • Beiträge: 9
Re: Neu hinzugekommene Datensätze bzw. entfallene Datensätze finden
« Antwort #5 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