Pregunta

He intentado un par de enfoques para actualizar una columna en una tabla de base de datos mySQL desde otra tabla, pero no tengo suerte.

Leí en alguna parte que la versión 3.5.2 no admite actualizaciones de varias tablas y necesito una solución basada en código, ¿es eso correcto?

Si no, ¿alguien puede señalarme en la dirección correcta usando sql?

UPDATE products SET products_ordered = (
    SELECT SUM(products_quantity) 
    FROM orders_products 
    WHERE products_id = products.products_id
);

o:

Create temporary table my_temp_table
as
SELECT products_id, SUM(products_quantity) as total 
FROM orders_products 
GROUP BY products_id 

UPDATE products, my_temp_table
SET products.products_ordered = my_temp_table.total 
WHERE products.products_id = my_temp_table.products_id
¿Fue útil?

Solución

Cuando solía usar MySQL que no admitía subconsultas ni actualizaciones de varias tablas, utilicé un truco para hacer lo que estás describiendo. Ejecute una consulta cuyos resultados sean en sí mismos sentencias SQL, y luego guarde el resultado y ejecútelo como un script SQL.

SELECT CONCAT( 
  'UPDATE products SET products_ordered = ', 
   SUM(products_quantity), 
  ' WHERE product_id = ', products_id, ';') AS sql_statement
FROM orders_products
GROUP BY products_id;

Por cierto, no existe tal versión MySQL 3.5.x hasta donde yo sé. Creo que puede haber informado de eso mal. O bien, está utilizando otro producto como mSQL.

Editar: olvidé agregar un punto y coma en la instrucción SQL generada por la consulta anterior.

Otros consejos

Las actualizaciones de varias tablas no son compatibles con MySQL < = 4.0.4 Recomiendo actualizar su servidor a MySQL 5.0.xx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top