Eu estou olhando para atualizar várias linhas no PostgreSQL em uma instrução. Existe uma maneira de fazer algo como o seguinte?
UPDATE table
SET
column_a = 1 where column_b = '123',
column_a = 2 where column_b = '345'
sql
postgresql
newUserNameHere
fonte
fonte
Respostas:
Você também pode usar
update ... from
sintaxe e usar uma tabela de mapeamento. Se você deseja atualizar mais de uma coluna, é muito mais generalizável:Você pode adicionar quantas colunas desejar:
sql fiddle demo
fonte
... from (values ('2014-07-21'::timestamp, 1), ('2014-07-20', 2), ...
Mais detalhes na documentaçãoCom base na solução do @Roman, você pode definir vários valores:
fonte
from (values $1)
Onde $ 1 é uma matriz de estruturas. No caso acima, o strict teria id, first_name e last_name como propriedades.Sim você pode:
E prova de trabalho: http://sqlfiddle.com/#!2/97c7ea/1
fonte
'123'
nem'345'
. Você deve usarWHERE column_b IN ('123','456')
...'456'
deveria ser'345'
ELSE column_b
após a últimaWHEN ? THEN ?
linha, a coluna será definida como seu valor atual, impedindo o que o MatheusQI disse que aconteceria.Me deparei com um cenário semelhante e a expressão CASE foi útil para mim.
Relatórios - é uma tabela aqui, account_id é o mesmo para os report_ids mencionados acima. A consulta acima definirá 1 registro (o que corresponde à condição) como true e todos os não correspondentes como false.
fonte
Para atualizar várias linhas em uma única consulta, você pode tentar isso
se você não precisar de condição adicional, remova
and
parte desta consultafonte
Digamos que você tenha uma matriz de IDs e uma matriz equivalente de status - aqui está um exemplo de como fazer isso com um SQL estático (uma consulta sql que não muda devido a valores diferentes) das matrizes:
fonte