Die Aktualisierung mehrere Zeilen mit unterschiedlichen primären Schlüssel in einer Abfrage in PostgreSQL?
Ich das update viele Spalten in mehreren Zeilen in PostgreSQL 9.1. Ich bin derzeit dabei es mit vielen verschiedenen UPDATE
Abfragen, die jeweils eine, die funktioniert auf eine andere Zeile (basierend auf dem Primärschlüssel):
UPDATE mytable SET column_a = 12, column_b = 6 WHERE id = 1;
UPDATE mytable SET column_a = 1, column_b = 45 WHERE id = 2;
UPDATE mytable SET column_a = 56, column_b = 3 WHERE id = 3;
Ich zu tun haben einige Tausende von Abfragen.
Ist es trotzdem kann ich "bulk update" zu viele Zeilen in einer Abfrage in PostgreSQL? Wenn Sie INSERT
können Sie mehrere Zeilen auf einmal: (INSERT INTO mytable (column_a, column_b) VALUES ( (12, 6), (1, 45) );
), gibt es so etwas wie, dass für UPDATE
?
Etwas wie:
UPDATE mytable SET (id, column_a, column_b) FROM VALUES ( (1, 12, 6), (2, 1, 45), (3, 56, 3), … )
??
Wichtigen Punkte ist, dass jeder 'VALUE' update nur eine Zeile (auf der Basis der WHERE id =
). Jede Zeile die gleiche, Feste Anzahl von Spalten, die aktualisiert werden müssen, aber die Zeilen haben unterschiedliche Werte für jede Spalte, so UPDATE mytable SET column_a = 12, column_b = 6 WHERE id IN (1, 2, 3);
wird nicht funktionieren.
InformationsquelleAutor Rory | 2013-09-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, Sie kann (und meist ist es bevorzugt, SQL) update mehrere Zeilen auf einmal. Es gibt ein paar Möglichkeiten, dies zu tun, aber die meisten lesbar und elegant wie ich finde ist die Verwendung einer abgeleiteten Tabelle mit id ' s und Werte:
Nicht so lesbar, aber mehr offensichtliche Lösung wäre das verwenden
case
:InformationsquelleAutor Roman Pekar
Wenn dies für Ihren Fall, Sie können es verwenden,.
SQL FIDDLE DEMO
InformationsquelleAutor Hamlet Hakobyan