Chcę zaktualizować wiele wierszy w PostgreSQL w jednym poleceniu. Czy istnieje sposób na zrobienie czegoś takiego?
UPDATE table
SET
column_a = 1 where column_b = '123',
column_a = 2 where column_b = '345'
sql
postgresql
newUserNameHere
źródło
źródło
Odpowiedzi:
Możesz także użyć
update ... from
składni i tabeli odwzorowań. Jeśli chcesz zaktualizować więcej niż jedną kolumnę, jest to o wiele bardziej ogólne:Możesz dodać dowolną liczbę kolumn:
sql fiddle demo
źródło
... from (values ('2014-07-21'::timestamp, 1), ('2014-07-20', 2), ...
Dalsze szczegóły w dokumentacji PostgreSQLW oparciu o rozwiązanie @Roman możesz ustawić wiele wartości:
źródło
from (values $1)
gdzie 1 $ to tablica struktur. W powyższym przypadku ścisły miałby jako właściwości identyfikator, imię i nazwisko.Tak, możesz:
I dowód roboczy: http://sqlfiddle.com/#!2/97c7ea/1
źródło
'123'
ani'345'
. Powinieneś użyćWHERE column_b IN ('123','456')
...'456'
powinno być'345'
ELSE column_b
po ostatnimWHEN ? THEN ?
wierszu, kolumna zostanie ustawiona na bieżącą wartość, co zapobiegnie temu, co powiedział MatheusQI.Znalazłem podobny scenariusz, a wyrażenie CASE było dla mnie przydatne.
Raporty - tutaj jest tabela, identyfikator_konta jest taki sam dla wspomnianych wyżej identyfikatorów_danych. Powyższe zapytanie ustawi 1 rekord (ten, który pasuje do warunku) na true, a wszystkie niepasujące - na false.
źródło
Aby zaktualizować wiele wierszy w jednym zapytaniu, możesz wypróbować to
jeśli nie potrzebujesz dodatkowych warunków, usuń
and
część tego zapytaniaźródło
Załóżmy, że masz tablicę identyfikatorów i równoważną tablicę stanów - oto przykład, jak to zrobić za pomocą statycznego SQL (zapytanie SQL, które nie zmienia się z powodu różnych wartości) tablic:
źródło