sql >> Base de Datos >  >> RDS >> Mysql

MySQL - SELECCIONE y luego ACTUALICE

Solo haz UPDATE cuando SELECT al mismo tiempo.

Cambia esto:

SELECT product_name, sku, qty 
FROM supplier_dropship_items 
WHERE supplier_id = '3' AND status = '2';

a esto:

UPDATE supplier_dropship_items as t, 
(
    SELECT id, product_name, sku, qty 
    FROM supplier_dropship_items 
    WHERE supplier_id = '3' AND status = '2'
) as temp
SET status = '1' WHERE temp.ID = t.ID;

Esto supone que tiene una columna de ID dentro de su tabla, ya que así es como debe configurarse y cómo se vería cualquier tabla normalizada.

Editar

Aquí hay un enlace para la documentación sobre esta sintaxis

Esencialmente, lo que esto está haciendo es intentar actualizar la tabla que aquí estamos alias como t , ejecuta simultáneamente una declaración de selección.
Esta declaración de selección devuelve una tabla de resultados a la que alias con el nombre temp .
Así que ahora imagine que el resultado de su declaración de selección está dentro de temp , mientras que toda la tabla que está actualizando está dentro de t .
Finalmente actualizas el status campo a 1 donde el ID (en estos dos conjuntos de resultados de alias) coinciden