Update table 1 von table2

datenbeisser

Aktiver Benutzer
Beiträge
38
Hi,

stehe als Anfänger mal wieder auf dem Schlauch.

Ich habe eine umfangreiche Tabelle1, für die ich zu Zeiten eine kleine Update-Tabelle2 erhalte.

Beide Tabellen haben Datensätze mit gleicher Struktur (identische Columnen).
In der kleinen Update-Tabelle2 befinden sich Korrekturen existierender Datensätzen aber auch neue, noch nicht vorhandene, Datensätze.

Jeder Datensatz aus Tabelle2 soll einfach in Tabelle1 geschrieben werden. Egal ob der Datensatz bereits in Tabelle1 bereits vorhanden ist (Datensatz überschreiben), oder noch nicht (Datensatz hinzufügen).

In beiden Tabellen sind ca. 30 Columnen. Es wäre toll, wenn es einen Befehl gibt, in dem nicht jede Columne einzeln angegeben werden muss, weil immer ein kompletter Datensatz mit allen Columnen geschrieben bzw. überschrieben werden soll.

Table 1:
id_name_col2_col3_col4...
1___a___abc
2___b___def
3___c___adf

Table 2:
id_name_col2_col3_col4....
2___y___345
4___z___xyz

Gewünschtes Resultat:
Table 1:
id_name_col2_col3_col4...
1___a___abc
2___y___345
3___c___adf
4___z___xyz

Vermutlich ist das doch eine Aufgabe, die in der Praxis oft vorkommt, oder?

Mit welchem SQLite Befehl kann das am einfachsten realisiert werden?

Grüße,
Datenbeisser
 
Zuletzt bearbeitet:
Werbung:
Leere die Tabelle 1 und schreibe den Inhalt der Tabelle 2 in Tabelle 1.
Das funktioniert leider nicht. Damit würde das Ergebnis so aussehen:

Table 1:
id_name_col2_col3_col4....
2___y___345
4___z___xyz

Gewünscht ist aber:

Table 1:
id_name_col2_col3_col4...
1___a___abc
2___y___345
3___c___adf
4___z___xyz

Tabelle1 ist ca. 20 Megabyte groß. Die Update Tabelle2 nur ca. 300 Kilobyte. Weil letztere eben nur Updates und Ergänzungen für die Tabelle1 enthält.
 
Ich hatte mir so etwas vorgestellt:

INSERT OR REPLACE INTO Table1
SELECT * FROM Table2

Obwohl "INSERT OR REPLACE" fast nicht falsch zu verstehen sind, tun sie in SQLite nicht was ich erwartet hatte.
Vorhandene Datensätze (Rows) werden damit nicht überschrieben, sondern hinzugefügt (REPLACE scheint nicht zu funktionieren). So dass doppelte Datensätze mit gleicher id enstehen :-(

Weiss jemand wie es richtig gemacht wird?
 
Werbung:
Habe glaube ich den Fehler gefunden:

INSERT OR REPLACE INTO Table1
SELECT * FROM Table2

Dieser Befehl funktioniert doch, ABER nur wenn die Columne id mit "UNIQUE ON CONFLICT IGNORE" erstellt wurde bzw. gekennzeichnet ist.
 
Zurück
Oben