Eu tenho um pouco de SQL simples para redefinir alguns valores em uma tabela
UPDATE tableA SET field1 = 0
WHERE field2 IN (SELECT .......)
Isso funciona bem, mas gostaria de modificá-lo para retornar o valor de todos field1
os valores antes de serem redefinidos para zero. Isso é o que eu tentei....
UPDATE tableA SET field1 = 0
WHERE field2 IN (SELECT .......)
RETURNING field1
O problema é que isso só retorna os valores de field1 depois de modificado. É possível obter o valor antes ? sem executar uma consulta separada?
Acho que a única opção é selecionar primeiro os valores antigos e depois retorná-los:
Supondo que haja uma coluna de chave primária nomeada,
pk
você poderia fazer algo assim:Passar os valores de PK da primeira CTE ("old_values") para a CTE que atualiza as linhas, evita repetir a condição na coluna2 na instrução UPDATE.
Editar:
Ocorreu-me que isso pode ser simplificado devido ao fato de que o CTE não vê alterações nas tabelas subjacentes.