Posso usar CASE
para escolher quais colunas serão exibidas em uma SELECT
consulta (Postgres), assim:
SELECT CASE WHEN val = 0 THEN column_x
WHEN val = 1 THEN column_y
ELSE 0
END AS update, ...
É possível algo semelhante ao executar uma UPDATE
consulta no Postgres (por exemplo, escolher quais colunas devem ser atualizadas)? Presumo que não, porque não consegui encontrar nada sobre isso, mas talvez alguém tenha uma alternativa inteligente (além de usar um procedimento ou atualizar cada coluna usando a CASE
para determinar se o valor da coluna deve receber um novo valor ou simplesmente reatribuir o valor existente valor). Se não houver uma alternativa fácil, é claro que também aceitarei isso como resposta.
Informações adicionais : no meu caso, tenho 14 colunas em potencial que podem ser atualizadas, com apenas uma sendo atualizada por linha correspondente (a tabela a ser atualizada é unida a outra na consulta). A quantidade de linhas a serem atualizadas provavelmente variará, pode ser de dezenas ou centenas. Acredito que existem índices para as condições de união.
fonte
Quantas combinações diferentes de colunas para atualizar você possui? Quantas linhas da tabela inteira serão atualizadas? Existem índices para acesso rápido às linhas para atualização?
Dependendo das respostas a essas perguntas, você poderá executar várias instruções de atualização, uma para cada coluna que deseja atualizar e colocar a condição no valor dessa coluna na cláusula where da atualização para que zero linhas sejam atualizadas se essa coluna tem o valor errado.
Tente pensar com base em conjunto, não presuma que a atualização precise atualizar uma única linha encontrada pela chave primária.
fonte
fonte