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.