MySQL - TempTabelle in MainTabelle übernehmen
Guten Tag liebe Gemeinde,
ich stehe "mal" wieder auf dem Schlauch. Ich würde gerne in MySQL Daten aus einer Temp Tabelle in eine Main Tabelle schreiben und zwar Updaten, wenn der Eintrag Anhand einer ID vorhanden ist und neu einfügen, wenn es diesen noch nicht gibt.
Aus MSSQL kenne ich es wie folgt:
Wie stelle ich es am besten bei MySQL an?
Mit den besten Grüßen aus dem Süden!
ich stehe "mal" wieder auf dem Schlauch. Ich würde gerne in MySQL Daten aus einer Temp Tabelle in eine Main Tabelle schreiben und zwar Updaten, wenn der Eintrag Anhand einer ID vorhanden ist und neu einfügen, wenn es diesen noch nicht gibt.
Aus MSSQL kenne ich es wie folgt:
MERGE test_3 t
USING test_3_temp s ON
(
s.ID = t.ID
)
WHEN MATCHED THEN UPDATE SET
t.ID = s.ID,
t.wert1 = s.wert1,
t.wert2 = s.wert2
WHEN NOT MATCHED BY TARGET THEN INSERT
(
ID, wert1, wert2
)
VALUES
(
s.ID, s.wert1, s.wert2
);
Wie stelle ich es am besten bei MySQL an?
Mit den besten Grüßen aus dem Süden!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2893757414
Url: https://administrator.de/contentid/2893757414
Ausgedruckt am: 24.11.2024 um 14:11 Uhr
8 Kommentare
Neuester Kommentar
Wenn MySQL kein MERGE kann ganz klassisch, mit UPDATE oder INSERT. Dazu kannst du etwa wie folgt vorgehen:
In deinem MERGE macht übrigens ID im UPDATE Teil keinen Sinn, das kann ja nicht abweichend sein, darauf wird ja gejoint - nur der Vollständigkeit halber.
Unter MSSQL hatte ich auch kuriose Dinge mit MERGE gesehen daher verfahre ich eigentlich immer so. Zumal ich den UPDATE Teil auch für jeden Wert gesondert durchführen kann und dann auch nur dieser Wert angefasst wird. Kann bei aktiven Log-Triggern sinnvoll sein.
UPDATE test_3
SET test_3.wert1 = s.wert1,
test_3.wert2 = s.wert2
FROM test_3
INNER JOIN test_3_temp s
ON test_3.ID = s.ID
WHERE test_3.wert1 != s.wert1
OR test_3.wert2 != s.wert2
INSERT INTO test_3
SELECT s.*
FROM test_3_temp s
LEFT JOIN test_3 t
ON s.ID = t.ID
WHERE t.ID IS NULL
Unter MSSQL hatte ich auch kuriose Dinge mit MERGE gesehen daher verfahre ich eigentlich immer so. Zumal ich den UPDATE Teil auch für jeden Wert gesondert durchführen kann und dann auch nur dieser Wert angefasst wird. Kann bei aktiven Log-Triggern sinnvoll sein.
Ergänzend kann man auch noch andere Wege nutzen, beim INSERT könnte man auch mit EXCEPT arbeiten, aber auch das ist ja vielleicht nicht überall gegeben. Wichtig ist die Reihenfolge, erst UPDATE auf den Bestand und dann neue Datensätze. Wenn alles in einer Transaktion laufen muss dürfte das auch gehen, ist aber vielleicht gar nicht nötig.
Moin,
ich werfe mal insert on duplicate key update in den Raum
https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html
Grüße
ich werfe mal insert on duplicate key update in den Raum
https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html
Grüße