Quero atualizar todas as colunas nomeadas com sufixo '[]' na tabela geochem
se tiverem zeros (0) com NULL.
Esta consulta retorna todos os nomes de colunas relevantes:
select c.COLUMN_NAME
from information_schema.COLUMNS as c
where c.TABLE_NAME = 'geochem'
and c.COLUMN_NAME like '%\[%\]'
Exemplo de resultados:
Em seguida, atualize os valores nessas colunas, por exemplo, colunaSiO2[%{wt}]
UPDATE geochem
SET "SiO2[%{wt}]" = NULL
WHERE "SiO2[%{wt}]" = 0;
Como posso combinar essas consultas para atualizar todas as colunas retornadas pelo primeiro trimestre, em vez de atualizar coluna por coluna manualmente?
Primeiro pergunte-se se uma estrutura de tabela com uma coluna de valor único como sugerida por Akina nos comentários não seria mais prática.
Embora esteja preso ao seu design atual, você precisa de SQL dinâmico para direcionar um conjunto dinâmico de colunas. Mas primeiro, otimize o(s) comando(s).
Cada
UPDATE
grava uma nova versão de linha para cada linha que não é excluída do arquivoUPDATE
. Sua abordagem escreve outra nova versão de linha para cada coluna.Combine tudo isso:
... em um único
UPDATE
:Observe a cláusula adaptada
WHERE
para verificar se alguma das colunas de destino contém 0 .NULLIF
por coluna só anula se for 0 .Para fazer isso dinamicamente, concatene a instrução com segurança e execute:
Adicionei um dispositivo de segurança infantil, então isso só gera um aviso com a instrução a ser executada. Remova o comentário da
EXECUTE
linha (e comente aRAISE NOTICE
linha) para executá-la imediatamente.