Ja, das können Sie mit einer CASE-Anweisung.
UPDATE table
SET val = CASE someproperty
WHEN 1 THEN x
WHEN 2 THEN y
....
ELSE
val
END
Es besteht nun die Sorge, dass eine CASE
Anweisung ist weniger lesbar, wenn man sie mit mehreren UPDATE
Erklärungen. Hier gibt es ein stichhaltiges Argument. Wenn zum Beispiel 1000 Zeilen aktualisiert werden, sieht es einfach besser aus und fühlt sich besser an, wenn man mehrere UPDATE
Anweisungen als 1000 verschiedene Bedingungen zu einer einzigen CASE
.
Manchmal ist jedoch eine CASE-Anweisung besser geeignet. Wenn Sie beispielsweise Zeilen auf der Grundlage eines Merkmals aktualisieren, z. B. der geraden oder ungeraden Natur des Wertes eines Feldes in der Tabelle, dann ist eine CASE
Anweisung ist ein wunderbar prägnanter und wartbarer Weg, um Zeilen in der Tabelle zu aktualisieren, ohne auf eine große Anzahl von UPDATE
Anweisungen, die alle eine bestimmte Art von Logik aufweisen. Nehmen wir zum Beispiel dies:
UPDATE table
SET val = CASE MOD(someproperty, 2)
WHEN 0 THEN x
WHEN 1 THEN y
END
Dieser Ausdruck nimmt den Modulus von someproperty und weist, wenn 0 (gerade), val den Wert x zu und, wenn 1 (ungerade), val den Wert y. Je größer die Datenmenge ist, die durch diese Anweisung aktualisiert wird, desto sauberer ist sie im Vergleich zu einer Aktualisierung durch mehrere UPDATE
Erklärungen.
Kurz gesagt, CASE
Anweisungen sind manchmal genauso lesbar/pflegbar wie UPDATE
Erklärungen. Es kommt ganz darauf an, was Sie mit ihnen erreichen wollen.
EDIT : Die ELSE-Klausel wurde hinzugefügt, um besonders sicher zu sein. Der OP ist möglicherweise daran interessiert, nur bestimmte Zeilen zu aktualisieren, so dass der Rest so bleiben sollte, wie er vor dem UPDATE war.
EDIT : Es wurde ein Szenario hinzugefügt, in dem der CASE
Anweisung ist ein wirksamerer Ansatz als mehrere UPDATE
Erklärungen.