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

Como atualizar uma coluna com base em outra coluna no SQL


Às vezes, você pode precisar atualizar uma coluna na tabela com base no valor de outra coluna na tabela. Aqui está como atualizar uma coluna com base em outra coluna no SQL Server, MySQL, PostgreSQL.



Como atualizar uma coluna com base em outra coluna no SQL


Aqui estão as etapas para atualizar uma coluna com base em outra coluna no SQL.

Digamos que você tenha a seguinte tabela employees(id, first_name, last_name)
mysql> create table employees(id int, 
      first_name varchar(255),
      last_name varchar(255));

mysql> insert into employees(id, first_name, last_name)
       values(1,'John','Doe'),
       (2,'Jane','Doe');

mysql> select * from employees;
+------+------------+-----------+
| id   | first_name | last_name |
+------+------------+-----------+
|    1 | John       | Doe       |
|    2 | Jane       | Doe       |
+------+------------+-----------+



Existem duas maneiras de atualizar a coluna com base no valor de outra coluna – usando a cláusula WHERE e usando a instrução CASE.



Atualizar coluna com base em outra coluna usando a cláusula WHERE


Aqui está a consulta SQL para atualizar first_name coluna com base no valor das colunas id usando a cláusula WHERE.
mysql> update employees
       set first_name='Tim'
       where id=1;
mysql> select * from employees;
+------+------------+-----------+
| id   | first_name | last_name |
+------+------------+-----------+
|    1 | Tim        | Doe       |
|    2 | Jane       | Doe       |
+------+------------+-----------+

Na instrução acima, a instrução UPDATE primeiro selecionará as linhas que correspondem à cláusula WHERE e atualizará o valor de nossa coluna first_name

Você também pode usar operadores lógicos como AND/OR em sua cláusula WHERE, conforme mostrado abaixo.
mysql> update employees
       set first_name='Tim'
       where id=1 or id=3;

Você também pode usar um operador IN na cláusula WHERE, conforme mostrado abaixo.
mysql> update employees
       set first_name='Tim'
       where id in (1,3);

Você também pode usar outra consulta SELECT em sua cláusula WHERE, conforme mostrado abaixo.
mysql> update employees
       set first_name='Tim'
       where id in ( select id from emp2 );

Neste caso, serão atualizadas todas aquelas linhas cujo valor de id corresponda a um dos valores retornados pela consulta SELECT.



Atualize a coluna com base em outra coluna usando a instrução CASE


Aqui está a consulta SQL para atualizar first_name coluna com base no valor de id coluna usando a instrução CASE.
mysql> update employees
     set first_name = (CASE
                           WHEN id = 1
                             THEN 'Tim'
                           WHEN id = 2
                             THEN 'Dave'
                           END);

mysql> select * from employees;
+------+------------+-----------+
| id   | first_name | last_name |
+------+------------+-----------+
|    1 | Tim        | Doe       |
|    2 | Dave       | Doe       |
+------+------------+-----------+

Usamos uma instrução CASE para especificar o novo valor de first_name coluna para cada valor de id coluna. Esta é uma abordagem muito melhor do que usar a cláusula WHERE porque com a cláusula WHERE só podemos alterar um valor de coluna para um novo valor. Com a instrução CASE, podemos atualizar o valor da coluna para vários valores, dependendo dos valores individuais da coluna id.

Leia também:Como corrigir valor de string incorreto no MySQL



Atualizar coluna com base em outra tabela


Você também pode atualizar a coluna em uma tabela de outra coluna em uma tabela diferente. Digamos que você também tenha outra tabela emp2(id, first_name, last_name) e você deseja atualizar first_name em funcionários tabela para first_name em emp2 tabela. Ambas as tabelas também têm o mesmo id valores da coluna.
mysql> create table emp2(id int,
       first_name varchar(255),
       last_name varchar(255));

mysql> insert into emp2(id, first_name, last_name)
            values(1,'Don','Stone'),
            (2,'Jim','Stew');

mysql> select * from emp2;
+------+------------+-----------+
| id   | first_name | last_name |
+------+------------+-----------+
|    1 | Don        | Stone     |
|    2 | Jim        | Stew      |
+------+------------+-----------+

Leia também:Principais blogs sobre MySQL para administradores de banco de dados

Nesse caso, você pode usar a sintaxe da instrução UPDATE a seguir para atualizar a coluna de uma tabela, com base no valor de outra tabela.
UPDATE first_table, second_table 
SET first_table.column1 = second_table.column2 
WHERE first_table.id = second_table.table_id;

Aqui está uma consulta SQL para atualizar first_name coluna em funcionários tabela para first_name coluna em emp2 tabela.
mysql> UPDATE employees, emp2
SET employees.first_name = emp2.first_name
WHERE employees.id = emp2.id;

mysql> select * from employees;
+------+------------+-----------+
| id   | first_name | last_name |
+------+------------+-----------+
|    1 | Don        | Doe       |
|    2 | Jim        | Doe       |
+------+------------+-----------+

O Ubiq facilita a visualização de dados e o monitoramento em painéis em tempo real. Experimente o Ubiq gratuitamente.