Hallo liebes Forum,
habe lange nicht Eure Hilfe gebraucht, aber jetzt ist es mal wieder soweit. Ich habe eine Löschabfrage erstellt, mit der ich in Abhängigkeit zu einer zweiten Tabelle, Daten in der ersten Tabelle löschen will. Heist, sind diese Daten in der zweiten Tabelle vorhanden, welche den Kriterien entsprechen, soll er diese aus der ersten löschen, um doppelte Daten zu vermeiden. Leider funktioniert es nicht, da er Daten löschen will, obwohl diese nicht in der zweiten Tabelle existent sind. Hier ist der SQL Code aus der Abfrage, vielleicht hat jemand eine Idee.
DELETE Datenimport_tbl.Kunde, Datenimport_tbl.AuftragsNr, Datenimport_tbl.MaterialNr, Datenimport_tbl.Materialbeschreibung
FROM Datenimport_tbl
WHERE (((Datenimport_tbl.Kunde) In (select Kunde from [Haupttabelle])) AND ((Datenimport_tbl.AuftragsNr) In (select AuftragsNr from [Haupttabelle])) AND ((Datenimport_tbl.MaterialNr) In (select MaterialNr from [Haupttabelle])) AND ((Datenimport_tbl.Materialbeschreibung) In (select Materialbeschreibung from [Haupttabelle])));
Danke vorab
Rene
Siehe Grundlagen - SQL ist leicht (4) - Aktualisierung einer Tabelle (https://www.ms-office-forum.net/forum/showthread.php?t=304156)
Deine Abfrage scheitert, weil nicht auf die Kombination der Schlüssel geprüft wird, sondern nur eine Prüfung stattfindet, ob jeder Einzelschlüssel irgendwo in der Haupttabelle vorhanden ist.
Hallo,
danke für die schnelle Antwort. Wie könnte ich die Abfrage ändern, daß alle Kriterien berücksichtigt werden?
Rene
Das Blaue ist ein Link. Damit erreichst Du einen anderen Beitrag. Dort ist auch eine passende Löschabfrage vorhanden, bei der jetzt aber nur zwei statt vier Schlüsselfelder verwendet werden.
Eventuell führst Du Dir sogar den gesamten Inhalt des Beitrages zu Gemüte. Da kann man in Praxis entnehmen, dass man in einer Datenimorttabelle gar nichts zu löschen braucht, wenn man in der Zieltabelle nur das einfügt, was neu ist.
Alle Bedingungen müssen in jedem Datensatz parallel wahr sein, um gleiche Daten zu ermitteln.
DELETE FROM Datenimport_tbl I
WHERE EXISTS
( SELECT 1
FROM Haupttabelle
WHERE Kunde = I.Kunde AND
Auftragsnr = I.Auftragsnr AND
Materialnr = I.Materialnr AND
Materialbeschreibung = I.Materialbeschreibung );
Hallo und sorry das ich mich jetzt erst melde.
Danke für den Support. Da es noch andere Probleme gibt, werde ich diese Geschichte aufgeben müssen und nach anderen Lösungsansätzen suchen. Trotzdem ist Euer Tip gespeichert und wird mir vielleicht später noch hilfreich sein.
Bis dahin
Rene