Ich möchte mehrere Zeilen in PostgreSQL in einer Anweisung aktualisieren. Gibt es eine Möglichkeit, Folgendes zu tun?
UPDATE table
SET
column_a = 1 where column_b = '123',
column_a = 2 where column_b = '345'
sql
postgresql
newUserNameHere
quelle
quelle
Antworten:
Sie können auch die
update ... from
Syntax und eine Zuordnungstabelle verwenden. Wenn Sie mehr als eine Spalte aktualisieren möchten, ist dies viel verallgemeinerbarer:Sie können beliebig viele Spalten hinzufügen:
sql fiddle demo
quelle
... from (values ('2014-07-21'::timestamp, 1), ('2014-07-20', 2), ...
Weitere Details in der PostgreSQL-DokumentationBasierend auf der Lösung von @Roman können Sie mehrere Werte festlegen:
quelle
from (values $1)
$ 1 ist ein Array von Strukturen. Im obigen Fall hätte der Strict ID, Vorname und Nachname als Eigenschaften.Ja, du kannst:
Und Arbeitsnachweis: http://sqlfiddle.com/#!2/97c7ea/1
quelle
'123'
Fall ist'345'
. Sie sollten verwendenWHERE column_b IN ('123','456')
...'456'
sollte sein'345'
ELSE column_b
nach der letztenWHEN ? THEN ?
Zeile hinzufügen , wird die Spalte auf den aktuellen Wert gesetzt, wodurch verhindert wird, dass das, was MatheusQI gesagt hat, passiert.Kam über ein ähnliches Szenario und der CASE-Ausdruck war für mich nützlich.
Berichte - ist hier eine Tabelle, account_id ist für die oben genannten report_ids identisch. Bei der obigen Abfrage wird 1 Datensatz (derjenige, der der Bedingung entspricht) auf true und alle nicht übereinstimmenden auf false gesetzt.
quelle
Sie können dies versuchen, um mehrere Zeilen in einer einzigen Abfrage zu aktualisieren
Wenn Sie keine zusätzliche Bedingung benötigen, entfernen Sie einen
and
Teil dieser Abfragequelle
Angenommen, Sie haben ein Array mit IDs und ein gleichwertiges Array mit Status. Hier ist ein Beispiel, wie dies mit einem statischen SQL (einer SQL-Abfrage, die sich aufgrund unterschiedlicher Werte nicht ändert) der Arrays durchgeführt wird:
quelle