Stack Overflow en español Asked on December 18, 2021
Con un trigger en la tabla DetalleCompras
quiero actualizar el campo stock
de una fila particular en la tabla Productos
.
Tabla DETALLECOMPRAS
En esta tabla inserto la cantidad de productos a comprar en el campo del mismo nombre CANTIDAD
Tabla PRODUCTOS
En esta tabla en el campo STOCK
quiero sumar la cantidad de la tabla detallecompras
pero, al hacerlo, me suma la cantidad para todas las filas y no, por ejemplo, solo para la fila donde esta 'PANADOL'
.
Tenia una cantidad de 10 en stock
para cada registro y al hacer dos inserciones de 10 solo para PANADOL
se sumaron a los otros dos registros, entonces lo que quiero es evitar que se sume para los demás registros y solo lo haga para un solo registro, espero darme a entender.
Mi trigger actual es:
DELIMITER $$
CREATE TRIGGER SumarStock
AFTER INSERT ON detallecompras
FOR EACH ROW BEGIN
UPDATE productos SET stock= stock + new.cantidad
WHERE codproducto` = codproducto;
END;
$$
El error está en la cláusula where
de la sentencia update
del trigger.
WHERE codproducto = codproducto
Dado que no calificas los campos, y que solo hay una tabla en la sentencia, esto es equivalente a:
WHERE productos.codproducto = productos.codproducto
Acá estás pidiendo al motor que, para cada fila de la tabla productos
compare el valor de la columna codproducto
consigo mismo. Todas las filas de la tabla, excepto las que tengan null
en esa columna, cumplirán con esa condición.
Pero lo que tu quieres es comparar el valor del campo codproducto
en la tabla productos
con el insertado en la tabla detallecompras
. Para ello haces referencia al registro que se está insertando con el pseudo registro New
, que tiene los valores que tomó el registro recién insertado, como ya lo haces para tomar el valor del campo cantidad
.
create trigger SumarStock
after insert on DetalleCompras
for each row
begin
update productos
set stock= stock + new.cantidad
where productos.codproducto = new.codproducto;
end;
Para evitar ambigüedades, he calificado ambos nombres de campo, así se verá con total claridad cual es mi intención, tanto para un programador, como para el motor.
Estoy asumiendo que el campo en la tabla DetalleCompras
que hace referencia al producto se llama codproducto
, pues no se ve en tu pregunta. Si no es así, ajusta tu el código.
Answered by jachguate on December 18, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP