Database
 sql >> Base de Dados >  >> RDS >> Database

Como atualizar uma coluna com base em um filtro de outra coluna


Neste tutorial, veremos as várias maneiras de atualizar linhas em uma tabela usando SQL, progredindo de atualizações mais gerais para métodos mais específicos.

Atualização completa


Se todos os campos precisam ser atualizados para o mesmo valor, você pode fazer isso usando um simples UPDATE comando.
UPDATE table
SET col = new_value;

Atualização condicional


Para fazer uma atualização condicional dependendo se o valor atual de uma coluna corresponde à condição, você pode adicionar um WHERE cláusula que especifica isso. O banco de dados primeiro encontrará as linhas que correspondem ao WHERE cláusula e, em seguida, apenas execute atualizações nessas linhas.
UPDATE table
SET col = new_value
WHERE col = old_value;

Para expandir isso, você pode adicionar qualquer coisa ao WHERE cláusula que você gosta, desde que seja uma expressão válida. Portanto, para realizar uma atualização com base no valor de outra coluna na mesma tabela, você pode executar o seguinte:
UPDATE table
SET col = new_value
WHERE other_col = some_other_value;

Desde o WHERE cláusula pode conter qualquer expressão válida, você também tem a possibilidade de fazer atualizações onde várias colunas atendem aos critérios
UPDATE table
SET col = new_value
WHERE col = old_value
AND other_col = some_other_value;

UPDATE table
SET col = new_value
WHERE col = old_value
OR other_col = some_other_value;

Como você pode ver, você pode expandir o WHERE cláusula o quanto você quiser para filtrar as linhas para atualizar para o que você precisa.

Agora, o que acontece se você quiser atualizar linhas em uma tabela com base na condição de outra tabela? Esta pergunta leva a algumas maneiras diferentes de fazer isso.

Desde o WHERE cláusula pode conter qualquer expressão válida, você pode usar uma subconsulta:
UPDATE table
SET col = new_value
WHERE other_col IN (
SELECT other_col
FROM other_table
WHERE conditional_col = 1
);

Você também pode usar uma subconsulta no SET parte da instrução se você quiser definir a coluna para um valor em outra tabela
UPDATE table
SET col = (
SELECT other_col
FROM other_table
WHERE other_table.table_id = table.id
);

Talvez uma maneira mais fácil seja especificar várias tabelas após o UPDATE cláusula. Apenas o SET expressão executará atualizações, mas listar tabelas adicionais permitirá que as tabelas sejam incluídas.
UPDATE table, other_table
SET table.col = other_table.other_col
WHERE table.id = other_table.table_id;

Da mesma forma que expandir o WHERE cláusula, a quantidade de tabelas pode ser expandida para incluir todas as tabelas que você precisa se você tiver várias tabelas que precisam ser unidas.