Ich möchte so etwas tun
INSERT INTO t (t.a, t.b, t.c)
VALUES ('key1','key2','value')
ON DUPLICATE KEY UPDATE
t.c = 'value';
INSERT INTO t (t.a, t.b, t.c)
VALUES ('key1','key3','value2')
ON DUPLICATE KEY UPDATE
t.c = 'value2';
ta und tb sind Schlüssel. Das alles funktioniert gut, aber ich bekomme eine Fehlermeldung beim zweiten Einsatz. Mit phpMyAdmin funktioniert eine solche Abfrage einwandfrei, aber ich vermute, sie führt die Abfragen unabhängig aus, während die Ergebnisse dieser Abfrage als Kommentare ausgedruckt werden.
So etwas wäre auch gut, aber ich muss für jeden Artikel unterschiedliche Werte haben. Ich bevorzuge dies, aber ich bin nicht sicher, wie ich den Wert auf dem Update für jeden Wert ändern kann.
INSERT INTO t (t.a, t.b, t.c)
VALUES ('key1','key2','value'), ('key1','key3','value2')
ON DUPLICATE KEY UPDATE
t.c = ???
Das Problem ist in den Fragezeichen, was soll ich dort setzen, damit jede Einfügung / Aktualisierung den richtigen Wert hat? Wenn ich dort einen Wert eingebe, erhalten natürlich alle Felder diesen Wert.
Wenn es eine andere Möglichkeit gibt, eine Abfrage "Aktualisieren, falls vorhanden, andernfalls einfügen" für mehrere Felder mit zwei Schlüsseln durchzuführen, bin ich auch für andere Ideen bereit. Ich denke, ich könnte jede Abfrage einzeln ausführen (wie phpMyAdmin?), Aber es wird eine Menge Abfragen geben, also möchte ich das wirklich vermeiden.
Zu wenig Repräsentation für einen Kommentar, aber ich wollte eine etwas komplexere Syntax hinzufügen, die von der @ ʞɔıu-Antwort inspiriert wurde. So aktualisieren Sie mehrere Felder bei doppeltem Schlüssel:
INSERT INTO t (t.a, t.b, t.c, t.d) VALUES ('key1','key2','value','valueb'), ('key1','key3','value2','value2b') ON DUPLICATE KEY UPDATE t.c = VALUES(t.c), t.d = VALUES(t.d)
Ich hoffe, das hilft jemandem da draußen, der eine Masseneinfügung mit mehreren Aktualisierungen bei doppeltem Schlüssel durchführen möchte. Die Syntax ist mir entgangen.
quelle
Nach MySQL 8.0.19 können Sie
as
beispielsweise Schlüsselwörter verwenden:INSERT INTO t1 (a,b,c) VALUES (1,2,3),(4,5,6) AS new ON DUPLICATE KEY UPDATE c = new.a+new.b;
oder
INSERT INTO t1 (a,b,c) VALUES (1,2,3),(4,5,6) AS new(m,n,p) ON DUPLICATE KEY UPDATE c = m+n;
ref: https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html
quelle