Actualización de asociación de tablas múltiples MySQL UPDATE

MySQL puede consultar y actualizar datos basados ​​en múltiples tablas. Para las operaciones UPDATE de varias tablas, debe tener cuidado. Se recomienda usar la instrucción SELECT para consultar y verificar si los datos actualizados son consistentes con sus expectativas antes de actualizar.
A continuación, creamos dos tablas, una es la tabla de productos, que se utiliza para almacenar información del producto, incluido el precio del campo del precio del producto; la otra es la tabla product_price. Ahora necesitamos actualizar el precio del campo de precio en la tabla product_price al 80% del precio del campo de precio en la tabla de productos.
Antes de la operación, verifique los datos de las dos tablas por separado. Las declaraciones SQL y los resultados en ejecución son los siguientes:

mysql> SELECT * FROM product;
+ ---- + ----------- + ----------------------- + - ------ + ---------- +
| id | productid | productname | price | isdelete |
+ ---- + ----------- + --- -------------------- + ------- + ---------- +
| 1 | 1001 | Idioma C Chino Net Java Tutorial | 100 | 0 |
| 2 | 1002 | Tutorial de MySQL en red en chino en lenguaje C | 110 | 0 |
| 3 | 1003 | Tutorial de Python en red en chino en lenguaje C | 120 | 0 |
| 4 | 1004 | Tutorial en lenguaje C de red en chino en lenguaje C | 150 | 0 |
| 5 | 1005 | Tutorial de GoLang del sitio web chino en idioma C | 160 | 0 |
+ ---- + ----------- + ----------- ------------ + ------- + ---------- +
5 filas en conjunto (0.02 seg)

mysql> SELECT * FROM product_price;
+ ---- + ----------- + ------- +
| id | productid | precio |
+ ---- + ----------- + ------- +
| 1 | 1001 | NULL |
| 2 | 1002 | NULL |
| 3 | 1003 | NULL |
| 4 | 1004 | NULL |
| 5 | 1005 | NULL |
+ ---- + ----------- + ------- +
5 filas en conjunto (0.01 seg)

Las siguientes son varias formas diferentes de escribir la actualización de tablas múltiples de MySQL en la práctica. Ejecute diferentes sentencias SQL y observe cuidadosamente los cambios en los datos de la tabla después de que se ejecute la sentencia SQL Es fácil comprender el uso de la actualización conjunta de varias tablas.

1. Utilice ACTUALIZAR

En MySQL, puede usar "ACTUALIZAR tabla1 t1, tabla2, ..., tabla n" para actualizar varias tablas. La declaración SQL y los resultados de ejecución son los siguientes:

mysql> ACTUALIZAR producto p, producto_precio pp SET pp.price = p.price * 0.8 DONDE p.productid = pp.productId; 
Consulta OK, 5 filas afectadas (0.02 seg) 
Filas coincidentes: 5 Modificadas: 5 Advertencias: 0 

mysql> SELECT * FROM product_price; 
+ ---- + ----------- + ------- + 
| id | productid | precio | 
+ ---- + ----------- + ------- + 
| 1 | 1001 | 80 | 
| 2 | 1002 | 88 | 
| 3 | 1003 | 96 | 
| 4 | 1004 | 120 | 
| 5 | 1005 | 128 | 
+ ---- + ----------- + ------- + 
5 filas en conjunto (0.00 seg)

2. A través de INNER JOIN

Otro método es utilizar INNER JOIN para actualizar varias tablas. La declaración SQL es la siguiente:

mysql> ACTUALIZAR producto p INNER JOIN product_price pp ON p.productid = pp.productid SET pp.price = p.price * 0.8; 
Consulta OK, 5 filas afectadas (0.09 seg) 
Filas coincidentes: 5 Modificadas: 5 Advertencias: 0 

mysql> SELECT * FROM product_price; 
+ ---- + ----------- + ------- + 
| id | productid | precio | 
+ ---- + ----------- + ------- + 
| 1 | 1001 | 80 | 
| 2 | 1002 | 88 | 
| 3 | 1003 | 96 | 
| 4 | 1004 | 120 | 
| 5 | 1005 | 128 | 
+ ---- + ----------- + ------- + 
5 filas en conjunto (0.00 seg)

3. A través de LEFT JOIN

También puede utilizar LEFT JOIN para actualizar varias tablas. Si no hay ningún registro de precio de producto en la tabla product_price, establezca el campo isdelete de la tabla de producto en 1. Agregue 1006 productos a la tabla de productos y no agregue la información correspondiente a la tabla de precios_producto. La declaración SQL es la siguiente.

mysql> UPDATE product p LEFT JOIN product_price pp ON p.productid = pp.productid SET p.isdelete = 1 WHERE pp.productid IS NULL; 
Consulta OK, 1 fila afectada (0.04 seg) 
Filas coincidentes: 1 Modificado: 1 Advertencias: 0 

mysql> SELECT * FROM product; 
+ ---- + ----------- + ----------------------- + - ------ + ---------- + 
| id | productid | productname | price | isdelete | 
+ ---- + ----------- + --- -------------------- + ------- + ---------- + 
| 1 | 1001 | Idioma C Chino Net Java Tutorial | 100 | 0 | 
| 2 | 1002 | Tutorial de MySQL de red china en lenguaje C | 110 | 0 | 
| 3 | 1003 | Tutorial de Python en red chino en lenguaje C | 120 | 0 | 
| 4 | 1004 | Tutorial de lenguaje C en red china | 150 | 0 |  
| 5 | 1005 | Tutorial de GoLang en el sitio web chino en idioma C | 160 | 0 |
| 6 | 1006 | Tutorial de Net Spring en chino en lenguaje C | NULL | 1 | 
+ ---- + ----------- + ---------------- ------- + ------- + ---------- + 
6 filas en conjunto (0.00 seg)

4. Vía subconsulta

También puede actualizar varias tablas a través de una subconsulta. La instrucción SQL y el proceso de ejecución son los siguientes:

mysql> ACTUALIZAR product_price pp SET price = (SELECT price * 0.8 FROM product WHERE productid = pp.productid); 
Consulta OK, 5 filas afectadas (0.00 seg) 
Filas coincidentes: 5 Modificadas: 5 Advertencias: 0 

mysql> SELECT * FROM product_price; 
+ ---- + ----------- + ------- + 
| id | productid | precio | 
+ ---- + ----------- + ------- + 
| 1 | 1001 | 80 | 
| 2 | 1002 | 88 | 
| 3 | 1003 | 96 | 
| 4 | 1004 | 120 | 
| 5 | 1005 | 128 | 
+ ---- + ----------- + ------- + 
5 filas en conjunto (0.00 seg)

Además, los varios ejemplos anteriores están relacionados con dos tablas, solo actualice los registros en una tabla. MySQL también puede actualizar dos tablas al mismo tiempo. La siguiente declaración modifica ambas tablas al mismo tiempo.

ACTUALIZAR producto p INNER JOIN producto_precio pp ON p.productid = pp.productid SET pp.price = p.price * 0.8, p.dateUpdate = CURDATE ()

Las dos tablas están relacionadas y el campo de precio de la tabla product_price y dateUpdate de la tabla de productos se actualizan al mismo tiempo.

Supongamos que tenemos dos tablas, una tabla es la tabla Producto para almacenar información del producto, que contiene la columna de precio del producto Price; la otra tabla es la tabla ProductPrice, necesitamos actualizar el campo de precio Price en la tabla ProductPrice al campo de precio en la tabla de precios 80%.
En Mysql, tenemos varios métodos para hacer esto, uno es actualizar table1 t1, table2 ts ...:

Copia el código El código es el siguiente:


ACTUALIZAR producto p, productoPrecio pp
SET pp.price = pp.price * 0.8
DONDE p.productId = pp.productId
Y p.dateCreated <'2004-01-01'


Otro método es usar la combinación interna y luego actualizar:

Copia el código El código es el siguiente:


ACTUALIZAR producto p
INNER JOIN productPrice pp
ON p.productId = pp.productId
SET pp.price = pp.price * 0.8
WHERE p.dateCreated <'2004-01-01'


Además, también podemos usar la combinación externa izquierda para realizar una actualización de varias tablas. Por ejemplo, si no hay un registro de precio del producto en la tabla ProductPrice, establezca el campo isDeleted de la tabla Product en 1, de la siguiente manera:

Copia el código El código es el siguiente:


ACTUALIZAR producto p
LEFT JOIN productPrice pp
ON p.productId = pp.productId
SET p.deleted = 1
DONDE pp.productId ES nulo


Además, los varios ejemplos anteriores están relacionados con las dos tablas, pero solo actualizan los registros en una tabla, de hecho, es posible actualizar las dos tablas al mismo tiempo, como sigue sql:

Copia el código El código es el siguiente:


ACTUALIZAR producto p
INNER JOIN productPrice pp
ON p.productId = pp.productId
SET pp.price = pp.price * 0.8,
p.dateUpdate = CURDATE ()
WHERE p.dateCreated <'2004-01-01'

Las dos tablas están asociadas y el campo de precio de la tabla ProductPrice y el campo dateUpdate del campo de tabla Producto se actualizan.

Veamos un ejemplo concreto.

actualizar órdenes o 
    dejar unir a los usuarios u 
        en o.userId = u.id 
set o.userName = u.name;

En el ejemplo anterior, la palabra clave de actualización va seguida de un conjunto de resultados relacionados con varias tablas. MySQL trata directamente el conjunto de resultados relacionados con varias tablas como una sola tabla y luego realiza operaciones de actualización periódicas sobre la base de esta única tabla.

La ligera diferencia con SQL Server es que la cláusula set de SQL Server sigue la tabla específica que se actualizará, y la declaración set de MySQL sigue el conjunto de resultados que se actualizará (la tabla específica que se actualizará se establece en la declaración set).

 

Supongo que te gusta

Origin blog.csdn.net/weixin_42041819/article/details/112986031
Recomendado
Clasificación