Actualice varias filas en la misma consulta usando PostgreSQL
Estoy buscando actualizar varias filas en PostgreSQL en una sola declaración. ¿Hay alguna manera de hacer algo como lo siguiente?
UPDATE table
SET
column_a = 1 where column_b = '123',
column_a = 2 where column_b = '345'
Aceptado
También puede utilizar update ... from
la sintaxis y utilizar una tabla de mapeo. Si desea actualizar más de una columna, es mucho más generalizable:
update test as t set
column_a = c.column_a
from (values
('123', 1),
('345', 2)
) as c(column_b, column_a)
where c.column_b = t.column_b;
Puedes agregar tantas columnas como quieras:
update test as t set
column_a = c.column_a,
column_c = c.column_c
from (values
('123', 1, '---'),
('345', 2, '+++')
) as c(column_b, column_a, column_c)
where c.column_b = t.column_b;
sql fiddle demo
Según la solución de @Roman, puede establecer varios valores:
update users as u set -- postgres FTW
email = u2.email,
first_name = u2.first_name,
last_name = u2.last_name
from (values
(1, '[email protected]', 'Hollis', 'Connell'),
(2, '[email protected]', 'Robert', 'Duncan')
) as u2(id, email, first_name, last_name)
where u2.id = u.id;
Sí tu puedes:
UPDATE foobar SET column_a = CASE
WHEN column_b = '123' THEN 1
WHEN column_b = '345' THEN 2
END
WHERE column_b IN ('123','345')
Y prueba funcional: http://sqlfiddle.com/#!2/97c7ea/1