Uso de UPDATE JOIN en MySQL

Preet Sanghavi 28 marzo 2022
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 como table_2. La tabla mencionada en la cláusula UPDATE se actualiza y los datos de la tabla que no se mencionan después de la cláusula UPDATE 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áusula UPDATE.
  • 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.

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 Join

Artículo relacionado - MySQL Update