Actualizar tabla desde otra tabla en MySQL

Preet Sanghavi 29 marzo 2022
Actualizar tabla desde otra tabla en MySQL

En este tutorial, nuestro objetivo es explorar cómo actualizar los valores de una tabla en función de las entradas de otra tabla en MySQL.

Muchas veces, se hace necesario que las empresas y organizaciones actualicen constantemente los valores de una tabla en particular. Además, es posible que estos valores deban actualizarse en función de las entradas en otra tabla. Esta otra tabla puede estar vinculada a la tabla que se actualizará en función de una o más columnas.

Por ejemplo, supongamos que tenemos dos tablas. Uno es student_details y el otro es student_ids. Ambas tablas tienen una columna común llamada stu_firstName. Deseamos actualizar la tabla student_ids con el número de identidad de los estudiantes utilizando la información coincidente de la tabla student_details. Esto se puede hacer con la ayuda de una cláusula UPDATE JOIN.

Vamos a entender cómo funciona este método.

Sin embargo, antes de comenzar, creamos un conjunto de datos ficticio para trabajar. Aquí creamos una tabla, student_details, junto con algunas filas en ella.

-- create the table student_details
CREATE TABLE student_details(
  stu_id int,
  stu_firstName varchar(255) DEFAULT NULL,
  stu_lastName varchar(255) DEFAULT NULL,
  primary key(stu_id)
);
-- insert rows to the table student_details
INSERT INTO student_details(stu_id,stu_firstName,stu_lastName) 
 VALUES(1,"Preet","Sanghavi"),
 (2,"Rich","John"),
 (3,"Veron","Brow"),
 (4,"Geo","Jos"),
 (5,"Hash","Shah"),
 (6,"Sachin","Parker"),
 (7,"David","Miller");

La consulta anterior crea una tabla junto con filas con el nombre y apellido del estudiante. Para ver las entradas en los datos, utilizamos el siguiente código:

SELECT * FROM student_details;

El código anterior daría el siguiente resultado:

stu_id	stu_firstName	stu_lastName
1	      Preet	        Sanghavi
2	      Rich	        John
3	      Veron	        Brow
4	      Geo	        Jos
5	      Hash	        Shah
6	      Sachin	    Parker
7	      David	        Miller

Intentemos crear otra tabla llamada student_ids con las columnas stu_id y stu_firstName que indican el número de identidad y los nombres de los alumnos. Esto lo podemos hacer con la siguiente consulta.

CREATE TABLE student_id(
  stu_id int,
  stu_firstName varchar(255) DEFAULT NULL
);

INSERT INTO student_id(stu_id, stu_firstName) 
 VALUES(1,"Preet"),
 (1,"Rich"),
 (1,"Veron"),
 (5,"Geo"),
 (5,"Hash"),
 (5,"Sachin"),
 (5,"David");

Podemos visualizar esta tabla de la siguiente manera.

select * from student_id;

La salida del código antes mencionado se puede ilustrar de la siguiente manera.

stu_id	stu_firstName
1		Preet
1		Rich
1		Veron
5		Geo
5		Hash
5		Sachin
5		David

Ahora, intentemos actualizar la tabla student_id utilizando la tabla student_details.

UPDATE JOIN en MySQL

La sintaxis básica de la técnica UPDATE JOIN se puede ilustrar de la siguiente manera.

UPDATE table_2
INNER JOIN table_1 ON table_2.name = table_1.name
SET table_2.value = IF(table_1.value > 0, table_1.value, table_1.value)

Como podemos ver, en la consulta antes mencionada, actualizamos el valor de value en table_2 en función del valor de valor en table_1. Esto lo podemos hacer con la siguiente consulta.

UPDATE student_id
INNER JOIN student_details ON student_id.stu_firstName = student_details.stu_firstName
SET student_id.stu_id = student_details.stu_id;

El código mencionado actualiza los valores de la columna stu_id de la tabla student_id. La salida del código antes mencionado se puede ilustrar de la siguiente manera.

stu_id	stu_firstName
1		Preet
2		Rich
3		Veron
4		Geo
5		Hash
6		Sachin
7		David

Como podemos ver, el nombre de la columna stu_id se actualiza en función de los valores de la tabla student_details. Esta unión se realiza utilizando el nombre de tabla común stu_firstName. Estos valores de stu_firstName coinciden para ambas columnas y el valor correspondiente de la columna stu_id de la tabla student_details se refleja en la tabla student_id.

Una alternativa a esta solución sería evitar el uso de INNER JOIN y realizar directamente una unión con la ayuda de la cláusula WHERE ON. La operación antes mencionada se puede hacer con esta técnica de la siguiente manera.

UPDATE student_id
SET student_id.stu_id = (
	SELECT student_details.stu_id 
    from student_details
    WHERE student_details.stu_firstName = student_id.stu_firstName
);

Aquí, como podemos ver, la salida del código mencionado anteriormente se puede ilustrar nuevamente con el comando SELECT * from student_id para obtener los siguientes resultados.

stu_id	stu_firstName
1		Preet
2		Rich
3		Veron
4		Geo
5		Hash
6		Sachin
7		David

Por lo tanto, con la ayuda de la técnica UPDATE JOIN, podemos actualizar de manera eficiente una columna de una tabla en función de los valores de otra tabla en MySQL.

Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub

Artículo relacionado - MySQL Query