maik87
Goto Top

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

Content-Key: 93615

Url: https://administrator.de/contentid/93615

Printed on: April 19, 2024 at 08:04 o'clock

Member: AndreasHoster
AndreasHoster Aug 05, 2008 at 09:36:37 (UTC)
Goto Top
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)
Member: Maik87
Maik87 Aug 05, 2008 at 09:38:47 (UTC)
Goto Top
Nicht schon in der Zieltabelle bedeutet, dass nicht exakt dieser Datensatz schon so vorhanden ist. Da ich selbst die Primärschlüssel übernehme, habe ich eine 1:1 Kopie. Es ist also ALLES identisch in diesem Fall.
Member: AndreasHoster
AndreasHoster Aug 05, 2008 at 10:05:40 (UTC)
Goto Top
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.
Member: Maik87
Maik87 Aug 05, 2008 at 10:47:59 (UTC)
Goto Top
Hi,
nee sry, da haben wir uns missverstanden. Entweder der Datensatz ist komplett gleich oder total unterschiedlich. Ist der Primärschlüssel nicht in der Zieltabelle, dann will ich ihn einfügen! Ich habe keine Datensätze, die gleiche Primärschlüssel aber unterschiedliche Daten haben!
Member: AndreasHoster
AndreasHoster Aug 05, 2008 at 11:19:41 (UTC)
Goto Top
Na dann entweder nach Variante A:
INSERT INTO Test1
SELECT * FROM Test where ID not in (Select ID from Test1)
oder nach Variante B:
Ein Makro machen, die Warnmeldungen ausschalten, dann <Insert into Zieltabelle select * from Quelltabelle>, die Warnmeldungen wieder einschalten.