sql >> Base de Datos >  >> RDS >> Database

Cómo actualizar una columna basada en otra columna en SQL

A veces, es posible que deba actualizar una columna en la tabla según el valor de otra columna en la tabla. Aquí se explica cómo actualizar una columna basada en otra columna en SQL Server, MySQL, PostgreSQL.


Cómo actualizar una columna basada en otra columna en SQL

Estos son los pasos para actualizar una columna basada en otra columna en SQL.

Digamos que tiene la siguiente tabla empleados (id, nombre, apellido)

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       |
+------+------------+-----------+

Hay dos formas de actualizar la columna según el valor de otra columna:usando la cláusula WHERE y usando la instrucción CASE.


Actualizar columna basada en otra columna usando la cláusula WHERE

Aquí está la consulta SQL para actualizar first_name columna basada en el valor de las columnas de identificación usando la 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       |
+------+------------+-----------+

En la instrucción anterior, la instrucción UPDATE primero seleccionará las filas que coincidan con la cláusula WHERE y actualizará el valor de nuestra columna first_name

También puede usar operadores lógicos como AND/OR en su cláusula WHERE como se muestra a continuación.

mysql> update employees
       set first_name='Tim'
       where id=1 or id=3;

También puede usar un operador IN en la cláusula WHERE como se muestra a continuación.

mysql> update employees
       set first_name='Tim'
       where id in (1,3);

También puede usar otra consulta SELECT en su cláusula WHERE como se muestra a continuación.

mysql> update employees
       set first_name='Tim'
       where id in ( select id from emp2 );

En este caso, se actualizarán todas aquellas filas cuyo valor de id coincida con uno de los valores devueltos por la consulta SELECT.


Actualizar columna basada en otra columna usando declaración CASE

Aquí está la consulta SQL para actualizar first_name columna basada en el valor de id columna usando la instrucción 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 una instrucción CASE para especificar el nuevo valor de first_name columna para cada valor de id columna. Este es un enfoque mucho mejor que usar la cláusula WHERE porque con la cláusula WHERE solo podemos cambiar el valor de una columna a un valor nuevo. Con la declaración CASE, podemos actualizar el valor de nuestra columna a varios valores, dependiendo de los valores individuales de la columna id.

Lea también:Cómo corregir un valor de cadena incorrecto en MySQL


Actualizar columna basada en otra tabla

También puede actualizar la columna en una tabla desde otra columna en una tabla diferente. Digamos que también tiene otra tabla emp2(id, first_name, last_name) y desea actualizar first_name en empleados tabla a first_name en emp2 mesa. Ambas tablas también tienen el mismo id valores de columna.

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      |
+------+------------+-----------+

Lea también:Los mejores blogs de MySQL para administradores de bases de datos

En tal caso, puede usar la siguiente sintaxis de instrucción UPDATE para actualizar la columna de una tabla, según el valor de otra tabla.

UPDATE first_table, second_table 
SET first_table.column1 = second_table.column2 
WHERE first_table.id = second_table.table_id;

Aquí hay una consulta SQL para actualizar first_name columna en empleados tabla a first_name columna en emp2 mesa.

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       |
+------+------------+-----------+

Ubiq facilita la visualización de datos y la supervisión en paneles en tiempo real. Prueba Ubiq gratis.