Anfügeabfrage ohne doppelte Datensätze
Hallo,
ich brauche eine Anfügeabfrage, die nur die Datensätze anfügt, die noch nicht in der Zieltabelle sind.
Wie geht das?
Vielen Dank
ich brauche eine Anfügeabfrage, die nur die Datensätze anfügt, die noch nicht in der Zieltabelle sind.
Wie geht das?
Vielen Dank
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 93615
Url: https://administrator.de/forum/anfuegeabfrage-ohne-doppelte-datensaetze-93615.html
Ausgedruckt am: 26.04.2025 um 02:04 Uhr
5 Kommentare
Neuester Kommentar
Indem man in der where Bedingung des Insert Into die Felder so verknüpft, daß nur die genommen werden, die noch nicht in der Ziel-Tabelle sind.
Da stellt sich schon die erste Frage, was bedeutet bei Dir die Formulierung <die noch nicht in der Zieltabelle sind>?
Das der Primärschlüssel schon existiert, daß ein sonstiges Identifikationsfeld schon existiert, oder das alle Felder mit genau denselben Werten drinstehen?
Einfaches Beispiel, mit einzelnem Primärschlüssel namens ID:
INSERT INTO Test1
SELECT * FROM Test where ID not in (Select ID from Test1)
Da stellt sich schon die erste Frage, was bedeutet bei Dir die Formulierung <die noch nicht in der Zieltabelle sind>?
Das der Primärschlüssel schon existiert, daß ein sonstiges Identifikationsfeld schon existiert, oder das alle Felder mit genau denselben Werten drinstehen?
Einfaches Beispiel, mit einzelnem Primärschlüssel namens ID:
INSERT INTO Test1
SELECT * FROM Test where ID not in (Select ID from Test1)
In dem Fall haben wir schon ein erstes Problem.
Wenn nicht alle Felder identisch sind, soll er übernommen werden. Was machen wir aber, wenn der Primärschlüssel im Ziel schon vorhanden ist, aber sich in den nicht Primärschlüsselfeldern Unterschiede befinden?
Dann kann der Datensatz nicht eingefügt werden, da es eine Primärschlüsselverletzung gibt, aber er sollte ingefügt werden, da es Unterschiede in den Sekundärfeldern gibt.
Falls es ausreichend ist, nur die hinzuzufügen, deren Primärschlüssel in der Zieltabelle nicht vorhanden ist, fällt mir für Access eine noch viel einfachere Lösung ein:
Ein Makro machen, die Warnmeldungen ausschalten, dann <Insert into Zieltabelle select * from Quelltabelle>, die Warnmeldungen wieder einschalten.
Die Zeilen, bei denen der Primärschlüssel schon vorhanden ist werden eh nicht übernommen, da es eine Primärschlüsselverletzung wäre und die Meldung deswegen wird unterdrückt.
Wenn nicht alle Felder identisch sind, soll er übernommen werden. Was machen wir aber, wenn der Primärschlüssel im Ziel schon vorhanden ist, aber sich in den nicht Primärschlüsselfeldern Unterschiede befinden?
Dann kann der Datensatz nicht eingefügt werden, da es eine Primärschlüsselverletzung gibt, aber er sollte ingefügt werden, da es Unterschiede in den Sekundärfeldern gibt.
Falls es ausreichend ist, nur die hinzuzufügen, deren Primärschlüssel in der Zieltabelle nicht vorhanden ist, fällt mir für Access eine noch viel einfachere Lösung ein:
Ein Makro machen, die Warnmeldungen ausschalten, dann <Insert into Zieltabelle select * from Quelltabelle>, die Warnmeldungen wieder einschalten.
Die Zeilen, bei denen der Primärschlüssel schon vorhanden ist werden eh nicht übernommen, da es eine Primärschlüsselverletzung wäre und die Meldung deswegen wird unterdrückt.