0

introducir la descripción de la imagen aquí

introducir la descripción de la imagen aquí

Hola buenas noches! Estoy creando las consultas de mi primera db; quiero actualizar el atributo WEIGHT_PURCH de la entidad packing_lists restando el valor del atributo WEIGHT_SOLD de la entidad orders, relacionadas de 1 a N, estando la FK en la entidad orders que es el atributo packinglists_id relacionada con el id de la entidad packing_lists.

Este es el código como estaba haciendo la consulta, ¡me arroja error de sintaxis!

UPDATE packing_lists 
SET weight_purcha = weight_purcha - weight_sold 
FROM packing_lists pl, orders o 
WHERE pl.id = o.packinglist_id;

Como les comenté es mi primera base de datos y lo estoy haciendo para tener el stock de los productos que se registran por número de lote y al registrar órdenes de ventas se actualice el peso de lo que ingreso.

Si hay otra manera que se pueda hacer o hay forma de hacerlo teniendo ustedes más experiencia, ¡estaré agradecido! ¡Gracias!

padaleiana
  • 2,175
  • 5
  • 16
  • 24
  • ¿Nos pasas el dataset (phpMyAdmin, Exportar) para probar la consulta y ver qué error da? – David JP Jul 16 '20 at 11:08
  • sera que el campo se llama weight_purch y no weight_purcha???? – gbianchi Jul 16 '20 at 16:56
  • Y siempre que tengas un error, decinos cual es... no sabemos cual es el error que te da... – gbianchi Jul 16 '20 at 16:57
  • Este es error que me da gbianchi! No ya el nombre del campo lo corregi e igual me da el error aun colocando las 2 opciones que aporto Emiliano! Este es el error: 0 103 03:41:15 UPDATE packing_lists SET packing_lists.weight_purchased = (packing_lists.weight_purchased - orders.weight_sold) INNER JOIN orders ON packing_lists.id = orders.packinglist_id Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INNER JOIN orders ON packing_lists.id = orders.packinglist_id' at line 3 0.000 sec – Aprendiz007 Jul 17 '20 at 08:43

1 Answers1

-1

Por lo que veo, tú código no se ve tan mal. Lo que observo es que pusiste alias a las tablas y luego solo utilizaste los nombres de los fields sin el alias. Otra cosa que veo es que haces un binding de las tablas a la antigua, prueba utilizando joins (aquí una explicación de la diferencia entre join y where ¿Cual es la diferencia de hacer un INNER JOIN con ON y con Where?), te dejo 2 opciones que puedes implementar dado que no especificas si utilizas mysql o sqlserver (u otra):

OPCION 1:

UPDATE PLS SET PLS.weight_purch = (PLS.weight_purch - O.weight_sold) 
FROM packing_lists PLS
INNER JOIN orders O ON PLS.id = O.packinglist_id;

OPCION 2:

UPDATE packing_lists PLS SET PLS.weight_purcha = (PLS.weight_purcha - O.weight_sold) 
INNER JOIN orders O ON PLS.id = O.packinglist_id;

Cuentanos como te fue!. Slds.

Emiliano Torres
  • 1,064
  • 9
  • 18
  • Tu respuesta es solo codigo. Por favor mira [answer]. Se pide que expliques que hace este código (mas alla que a ti vos te parezca obvio, puede que otro usuario no lo vea tan simple). – gbianchi Jul 16 '20 at 16:55