Guten Morgen ans Forum! :)
Ich habe folgendes Problem bei einer Datenbankabfrage:
In zwei Tabellen finden sich die Felder "Datum", "Mitarbeiter" und "Arbeitszeit", jedoch sind teilweise andere "Arbeitszeiten" in der zweiten Tabelle vorhanden.
Ich habe daher eine Abfrage erstellt, die mir die Datensätze auswirft, bei denen "Datum" und "Mitarbeiter" identisch sind und die "Arbeitszeit" abweicht (<>).
Das klappt soweit auch, allerdings wirft er mir auch Datensätze aus, die sozusagen in der zweiten Tabelle verrutscht sind.
Anbei mal ein Erklärungsversuch:
Tabelle 1
MA-Nr. | Datum | Arbeitszeit | Kasse | usw. |
5 | 01.01.2015 | 4 | 3 | usw. |
5 | 01.01.2015 | 5 | 4 | usw. |
Tabelle 2
MA-Nr. | Datum | Arbeitszeit | Kasse | usw. |
5 | 01.01.2015 | 5 | 4 | usw. |
5 | 01.01.2015 | 4 | 3 | usw. |
Eigentlich dürfte Access die Datensätze doch nicht anzeigen, weil es zu dem ersten Datenssatz aus Tabelle 1 einen entsprechenden Datensatz in Tabelle 2 gibt (den zweiten Datensatz). Allerdings wirft mir die Anfrage beide Datensätze aus.
Wo ist da mein Fehler? Access müsste doch jeden Datensatz der ersten Tabelle mit dem gesamten Bestand der zweiten Tabelle abgleichen oder sucht er nur den erstbesten Treffer? :-\
Vielen Dank vorab für eure Hilfe. Nutze Access erst seit ca. 3 Wochen. :D
Gruß
John
Warum sind bei Dir zwei Tabellen mit faktisch gleichem Inhalt bzw. gleichen Tabellenspalten vorhanden? Warum läuft das nicht in einer Tabelle? Die Datensätze sind ja auch identisch... Tabelle 1, Datensatz 1 = Tabelle 2, Datensatz 2; Tabelle 1, Datensatz 2 = Tabelle 2, Datensatz 1... Was macht das für einen Sinn? Was genau willst Du denn erreichen?
Hallo,
1.
Sind die Tabelleninhalte vollkommen gleich (zumindest die, die du im Beispiel zeigst) daher kann Access keinen Unterschied feststellen!
Somit könntest du lediglich feststellen, welche Datensätze ident sind und diese aus der Tabelle 2 löschen.
Etwa so:
DELETE [MA-NR] & [Datum] & [Arbeitszeit] & [Kasse] AS zuLoeschen FROM Tabelle2
WHERE [MA-NR] & [Datum] & [Arbeitszeit] & [Kasse] In (SELECT [MA-NR] & [Datum] & [Arbeitszeit] & [Kasse] FROM Tabelle1)
Um zu sehen welche Datensätze davon betroffen sind ohne diese zu löschen:
wähle vom Abfrageentwurf aus unter 'Ansicht' ---> 'Datenblattansicht'
oder ersetze in der SQL-Ansicht der Abfrage 'DELETE' durch 'SELECT Tabelle2.*,'
sollte dann so aussehen
SELECT Tabelle2.*, [MA-NR] & [Datum] & [Arbeitszeit] & [Kasse] AS zuLoeschen FROM Tabelle2
WHERE [MA-NR] & [Datum] & [Arbeitszeit] & [Kasse] IN (SELECT [MA-NR] & [Datum] & [Arbeitszeit] & [Kasse] FROM Tabelle1)
2.
Stellt sich mir die Frage, wieso es in deiner Datenbank 2, von der Struktur her idente Tabellen gibt?
3.
Solltest du das Feld 'Datum' umbenennen - z.B. 'ADatum' (für ArbeitszeitDatum) da Datum ein reserviertes Wort in Access ist.
4.
Denke ich, dass im gesamten Datenmodell der Wurm drin ist und dieses nicht das einzige Problem bleibt, dass dir begegnen wird.
Hi zusammen und danke für die schnellen Antworten.
Die Datenbank stammt nicht von mir. Ich soll nur die Einträge herausfiltern, die sich eben in Tabelle 1 und 2 anhand der Kriterien unterscheiden. Die Tabelle 1 wird dabei zur Auswertung der Arbeitszeit benutzt, die Tabelle 2 zur Auswertung der Überstunden. Warum das so aufgeteilt wurde, weiß ich nicht... ???
Ich will "nur" feststellen, welche Datensätze in den Tabellen geändert wurden bzw. anhand der Kriterien nicht übereinstimmen.
Die übrigen Felder der Tabelle sind schon unterschiedlich, nur eben diese 4 nicht.
Und japp, die Datenbank is eigentlich der reinste Müll, dachte nur, dass es vielleicht ne schnelle Lösung gibt.
Ich hatte mir alternativ folgendes überlegt:
Ich habe die Datensätze aus Tabelle 1 extrahiert, die definitiv mit denen aus Tabelle 2 übereinstimmen und wollte nun diese Datensätze von der (Ursprungs-)Tabelle 1 abziehen. Damit blieben dann ja nur die Einträge übrig, die eben nicht übereinstimmen oder?
Hallo,
ZitatIch habe die Datensätze aus Tabelle 1 extrahiert, die definitiv mit denen aus Tabelle 2 übereinstimmen und wollte nun diese Datensätze von der (Ursprungs-)Tabelle 1 abziehen
Um die Datensätze aus der Tabelle1 zu erhalten, die eine Entsprechung in Tabelle2 besitzen musst du nur die SQL ein wenig ändern:
SELECT Tabelle1.*, [MA-NR] & [Datum] & [Arbeitszeit] & [Kasse] AS Duplikate FROM Tabelle1
WHERE [MA-NR] & [Datum] & [Arbeitszeit] & [Kasse] IN (SELECT [MA-NR] & [Datum] & [Arbeitszeit] & [Kasse] FROM Tabelle2)
Zitatdiese Datensätze von der (Ursprungs-)Tabelle 1 abziehen
Hmmm... ich kann mit dieser Begrifflichkeit nicht viel anfangen - was verstehst du unter 'abziehen'
Wenn damit 'löschen' gemeint ist ...
DELETE Tabelle1.*, [MA-NR] & [Datum] & [Arbeitszeit] & [Kasse] AS Duplikate FROM Tabelle1
WHERE [MA-NR] & [Datum] & [Arbeitszeit] & [Kasse] IN (SELECT [MA-NR] & [Datum] & [Arbeitszeit] & [Kasse] FROM Tabelle2)
ZitatDamit blieben dann ja nur die Einträge übrig, die eben nicht übereinstimmen oder?
Damit bleiben in Tabelle1 nur die Datensätze über, die keine Übereinstimmung in den angegebenen Feldern der Tabelle2 besitzen.
ACHTUNG - führe eine so tiefgehende Änderung am Datenbestand zuvor nur an einer KOPIE der Datenbank durch und überprüfe dann ob alles passt!
Hallo und sorry, dass ich mich erst jetzt wieder melde.
Ich habe das Problem nun anders gelöst, indem ich nicht die einzelnen Mitarbeiter nach Tagen abgleiche (Wer hat was gemacht [je nach Tabelle]), sondern indem ich die Gesamttätigkeit (z.B. Kasse 4) für die einzelnen Tage zusammenrechne (Insgesamt wurde am Tag xy an Kasse yz soviele Stunden geleistet) und dann die beiden Tabellen vergleiche.
Da wo Unstimmigkeiten sind (z.B. lt. Tabelle 1: Kasse 4 am 01.01.2015 9 Stunden belegt, lt. Tabelle 2 aber nur 3), lasse ich mir nächsten Schritt die einzelnen Mitarbeiter anzeigen, die von dieser Unstimmigkeiten betroffen sind und kann dies dann nachprüfen.
Für meine Zwecke reicht das soweit aus.
VIELEN DANK für Eure Hilfe!
Vermutlich werde ich in nächster Zeit häufiger auf euch zukommen, beginne langsam Access zu mögen ;D
Ich setze den Beitrag auf erledigt. Vielen Dank nochmals.