Uso de UPDATE JOIN en MySQL
Este tutorial presentará cómo usar la declaración UPDATE JOIN
en una base de datos MySQL.
Por lo general, usamos JOIN
para recorrer filas en una tabla en particular que tiene o no filas similares en otra tabla. Podemos usar la cláusula JOIN
junto con la declaración UPDATE
para implementar múltiples actualizaciones de tablas.
La sintaxis básica de MySQL UPDATE JOIN
se puede ilustrar de la siguiente manera.
UPDATE Table_1, Table_2,
[INNER JOIN] Table_1 ON Table_1.Column_1 = Table_2. Column_1
SET Table_1.Column_2 = Table_2.Column_2,
Table_2.Column_3 = expression
WHERE condition
La sintaxis anterior funciona de la siguiente manera para una tabla en particular en MySQL.
- Comenzamos nuestro trabajo especificando la tabla principal llamada
table_1
y la mesa que queremos unir con la mesa principal comotable_2
. La tabla mencionada en la cláusulaUPDATE
se actualiza y los datos de la tabla que no se mencionan después de la cláusulaUPDATE
no se modificarán. - Una vez que hagamos eso, debemos mencionar el tipo de combinación que deseamos usar. En la sintaxis anterior, hemos utilizado la unión
INNER
. Esta unión debe venir inmediatamente después de la cláusulaUPDATE
. - Después de proporcionar valores a las columnas que deseamos actualizar, mencionamos una cláusula
WHERE
para especificar una condición particular para la actualización.
Hay una forma más de usar este método que se puede ilustrar de la siguiente manera.
UPDATE Table_1, Table_2
SET Table_1.column_2 = Table_2.column_2,
Table_2.column_3 = expr
WHERE Table_1.column_1 = Table_2.column_1 AND condition
Antes de comenzar, creemos dos tablas con las que trabajar. Llamaremos a estas tablas student_details
y marks
. Estas tablas se pueden crear con el siguiente código.
CREATE TABLE marks (
performance INT(11) NOT NULL,
percentage FLOAT NOT NULL,
PRIMARY KEY (performance)
);
CREATE TABLE student_details (
stu_id INT(11) NOT NULL AUTO_INCREMENT,
stu_name VARCHAR(255) NOT NULL,
performance INT(11) DEFAULT NULL,
total FLOAT DEFAULT NULL,
PRIMARY KEY (emp_id),
CONSTRAINT fk_performance FOREIGN KEY (performance)
REFERENCES marks (performance)
);
INSERT INTO marks(performance,percentage)
VALUES(1,0),
(2,0.01),
(3,0.03),
(4,0.05),
(5,0.08);
INSERT INTO student_details(stu_name,performance,total)
VALUES('Preet Sanghavi', 1, 50000),
('Joe Sand', 3, 65000),
('Su Greens', 4, 75000),
('Gray Dellop', 5, 125000),
('Neon Jonty', 3, 85000),
('Peter Foe', 2, 45000),
('Little Wayne', 3, 55000);
Para visualizar la tabla student_details
, usamos el siguiente código.
SELECT * FROM student_details;
El código anterior daría el siguiente resultado.
stu_id stu_name stu_performance total
1 Preet Sanghavi 1 50000
2 Joe Sand 3 65000
3 Su Greens 4 75000
4 Gray Dellop 5 125000
5 Neon Jonty 3 85000
6 Peter Foe 2 45000
7 Little Wayne 3 55000
De igual forma, podemos visualizar la tabla marks
.
SELECT * FROM marks;
El código anterior daría el siguiente resultado.
performance percentage
1 0
2 0.01
3 0.03
4 0.05
5 0.08
Como podemos ver en los bloques de código anteriores, el valor porcentual está en la tabla marks
, y tenemos que usar UPDATE JOIN
con INNER JOIN
como nuestra unión principal para ajustar el total
de cada estudiante en la tabla student_details
basada en los valores de percentage
y performance
en la tabla marks
.
Nota: Es importante tener en cuenta que el puente entre las dos tablas, student_details
y marks
, es la columna performance
.
Ahora veamos la instrucción UPDATE JOIN
en acción.
Usando la declaración UPDATE JOIN
en MySQL
Podemos realizar la operación de actualización como se describe anteriormente utilizando la siguiente consulta.
UPDATE student_details
INNER JOIN
marks ON student_details.performance = marks.performance
SET
total = total + total * percentage;
Aquí, la tabla student_details
es la tabla principal donde se debe actualizar el valor de total
.
Nota: debido a que nos deshacemos de la cláusula WHERE
en la declaración UPDATE
en la consulta mencionada anteriormente, todos los registros en la tabla student_details
se modifican según la condición SET
.
El resultado de la consulta mencionada anteriormente daría los siguientes resultados.
stu_id stu_name stu_performance total
1 Preet Sanghavi 1 50000
2 Joe Sand 3 66950
3 Su Greens 4 78750
4 Gray Dellop 5 135000
5 Neon Jonty 3 87550
6 Peter Foe 2 45450
7 Little Wayne 3 56650
Como podemos ver en el bloque de código anterior, el total
de cada alumno se actualiza en función de su performance
en la tabla de marks
.
Por lo tanto, con la ayuda de la técnica mencionada anteriormente, podemos usar de manera eficiente Update Join
en MySQL.
Artículo relacionado - MySQL Join
- LEFT JOIN en varias columnas en MySQL
- Unir 3 tablas en MySQL
- Eliminar con Join en MySQL
- Ejecute múltiples combinaciones en una consulta en MYSQL