Einzelnen Beitrag anzeigen

iGoA

Registriert seit: 9. Jul 2007
69 Beiträge
 
#1

"Überschreiben" einer Datenmenge

  Alt 24. Apr 2008, 17:41
Datenbank: MSACCESS • Version: 2003 • Zugriff über: ADO
Moin!

Ich habe folgende Situation: In eine große Tabelle sollen Daten aus einer kleinen Tabelle eingefügt oder, falls Datensätze mit gleichem Schlüssel schon vorhanden sind, überschrieben werden. Der Primärschlüssel besteht aus 3 Feldern. Ich habe nun ausprobiert vor jedem INSERT ein DELETE (where {Schlüsselfeldinhalte sind gleich}) auszuführen. Das erzielt zwar den gewünschten Effekt, aber durch die Größe der Haupttabelle dauert es ewig (Das DELETE braucht die meiste Zeit). Daher dachte ich nun daran, mit einem einzigen SQL-Befehl alle Datensätze zu löschen, deren Schlüssel in der einzufügenden Menge vorkommen. Also sozusagen "Platz machen", damit ich die Daten anschließend mit einem einzigen INSERT INTO X SELECT FROM Y einfügen kann (was sehr schnell funktioniert, aber eben crashed, wenn Schlüsselwerte doppelt vorkommen). Die Frage ist nur, wie ich dieses DELETE-Statement hinbekomme. Ich muss ja irgendwas in der Art DELETE FROM X WHERE {schlüsselwerte gibt´s in Y auch} ausführen. Bei einem einzigen Feld als Schlüssel würde das ganz einfach mit DELETE FROM X WHERE X.Schlüsselfeld in (SELECT Schlüsselfeld FROM Y) Aber wie macht man das am besten bei mehreren Feldern?
Ich habe schon probiert, alle Schlüsselfelder in einem Ausdruck zusammenzuführen, damit ich sie per IN abgleichen kann. Also nach dem Muster DELETE FROM X WHERE CSTR(X.Schlüsselfeld1)+'_'+CSTR(X.Schlüsselfeld2) in (SELECT CSTR(X.Schlüsselfeld1)+'_'+CSTR(X.Schlüsselfeld2) from Y) Das geht sogar auch, aber dauert dieses DELETE wieder ewig. Gibt´s ne bessere Lösung?
  Mit Zitat antworten Zitat