Estoy buscando actualizar varias filas en PostgreSQL en una 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'
sql
postgresql
nuevoUserNameHere
fuente
fuente
Respuestas:
También puede usar la
update ... from
sintaxis y usar una tabla de mapeo. Si desea actualizar más de una columna, es mucho más generalizable:Puede agregar tantas columnas como desee:
sql fiddle demo
fuente
... from (values ('2014-07-21'::timestamp, 1), ('2014-07-20', 2), ...
Más detalles en la documentación de PostgreSQLBasado en la solución de @Roman, puede establecer múltiples valores:
fuente
from (values $1)
donde $ 1 es una matriz de estructuras. En el caso anterior, el estricto tendría id, first_name y last_name como propiedades.Sí tu puedes:
Y prueba de funcionamiento: http://sqlfiddle.com/#!2/97c7ea/1
fuente
'123'
ni'345'
. Deberías usarWHERE column_b IN ('123','456')
...'456'
supone que es'345'
ELSE column_b
después de la últimaWHEN ? THEN ?
línea, la columna se establecerá en su valor actual, evitando así lo que MatheusQI dijo que sucedería.Encontré un escenario similar y la expresión CASE me fue útil.
Informes: aquí hay una tabla, account_id es igual para los report_ids mencionados anteriormente. La consulta anterior establecerá 1 registro (el que coincide con la condición) en verdadero y todos los que no coinciden en falso.
fuente
Para actualizar varias filas en una sola consulta, puede intentar esto
Si no necesita una condición adicional, elimine
and
parte de esta consultafuente
Supongamos que tiene una matriz de ID y una matriz equivalente de estados : aquí hay un ejemplo de cómo hacer esto con un SQL estático (una consulta sql que no cambia debido a diferentes valores) de las matrices:
fuente