UPDATE-Anweisung
Die UPDATE-Anweisung ändert die Werte von Zeilen in einer Tabelle.
Beispiele
Für jede Zeile, in der i NULL ist, den Wert stattdessen auf 0 setzen:
UPDATE tblSET i = 0WHERE i IS NULL;Alle Werte von i auf 1 und alle Werte von j auf 2 setzen:
UPDATE tblSET i = 1, j = 2;Syntax
UPDATE ändert die Werte der angegebenen Spalten in allen Zeilen, die die Bedingung erfüllen. Nur die zu ändernden Spalten müssen in der SET-Klausel genannt werden; nicht explizit geänderte Spalten behalten ihre bisherigen Werte.
Update aus einer anderen Tabelle
Eine Tabelle kann anhand von Werten aus einer anderen Tabelle aktualisiert werden. Das kann durch Angabe einer Tabelle in einer FROM-Klausel oder durch eine Unterabfrage geschehen. Beide Ansätze haben den Vorteil, dass die UPDATE-Operation in Bulk ausgeführt wird und so die Performance steigt.
CREATE OR REPLACE TABLE original AS SELECT 1 AS key, 'original value' AS value UNION ALL SELECT 2 AS key, 'original value 2' AS value;
CREATE OR REPLACE TABLE new AS SELECT 1 AS key, 'new value' AS value UNION ALL SELECT 2 AS key, 'new value 2' AS value;
SELECT *FROM original;| key | value |
|---|---|
| 1 | original value |
| 2 | original value 2 |
UPDATE original SET value = new.value FROM new WHERE original.key = new.key;Oder:
UPDATE original SET value = ( SELECT new.value FROM new WHERE original.key = new.key );SELECT *FROM original;| key | value |
|---|---|
| 1 | new value |
| 2 | new value 2 |
Update aus derselben Tabelle
Der einzige Unterschied zu dem obigen Fall ist, dass sowohl für die Ziel- als auch für die Quelltabelle ein anderer Tabellenalias angegeben werden muss.
In diesem Beispiel sind AS true_original und AS new beide erforderlich.
UPDATE original AS true_original SET value = ( SELECT new.value || ' a change!' AS value FROM original AS new WHERE true_original.key = new.key );Update mit Joins
Um die zu aktualisierenden Zeilen auszuwählen, können UPDATE-Anweisungen die FROM-Klausel nutzen und Joins über die WHERE-Klausel ausdrücken. Zum Beispiel:
CREATE TABLE city (name VARCHAR, revenue BIGINT, country_code VARCHAR);CREATE TABLE country (code VARCHAR, name VARCHAR);INSERT INTO city VALUES ('Paris', 700, 'FR'), ('Lyon', 200, 'FR'), ('Brussels', 400, 'BE');INSERT INTO country VALUES ('FR', 'France'), ('BE', 'Belgium');Um den Umsatz aller Städte in Frankreich zu erhöhen, joinen Sie die Tabellen city und country und filtern auf Letztere:
UPDATE citySET revenue = revenue + 100FROM countryWHERE city.country_code = country.code AND country.name = 'France';SELECT *FROM city;| name | revenue | country_code |
|---|---|---|
| Paris | 800 | FR |
| Lyon | 300 | FR |
| Brussels | 400 | BE |
Upsert (Insert oder Update)
Details finden Sie in der Insert-Dokumentation.