首页 > 解决方案 > 在触发器中使用 join in update 命令

问题描述

我有 3 张桌子

'stockMedicina' (farmaciaID,seriemedicina,stock)

'Factura' (farmaciaid,facturaid)

'DetalleFactura' (facturaid,seriemedicina,cantidad)

当我向 detalleFactura 插入新值时,我想更新 stockMedicina 的库存,这是一个名为 stock 的 int。因此,当我在 detalleFactura 中插入一个新值时,我想更新factura 表上的farmaciaid 库存以减少库存量。我有这段代码,但它不起作用,我现在不知道该怎么办。:(

DELIMITER $$;
CREATE TRIGGER diminuirStock
AFTER INSERT ON detalleFactura 
FOR EACH ROW
BEGIN
  UPDATE stockmedicina sm
    INNER JOIN factura fa ON sm.farmaciaid = fa.farmacia
    INNER JOIN detalleFactura df ON sm.seriemedicina = df.seriemedicina AND fa.facturaID=df.facturaID
    SET sm.stock = sm.stock - NEW.cantidad
    WHERE sm.FarmaciaID = fa.Farmacia and sm.seriemedicina=NEW.facturaID
END$$
DELIMITER ; 

任何关于它的想法或帮助都会非常有帮助:c

标签: mysqltriggerssql-update

解决方案


您的某些列的列名错误

架构 (MySQL v8.0)

CREATE TABLE stockMedicina (farmaciaID INT,seriemedicina INT ,stock INT);
INSERT INTO stockMedicina VALUES (1,1,10);

CREATE TABLE Factura (farmaciaid INT, faturaid INT);
INSERT INTO Factura VALUES (1,1);

CREATE TABLE DetalleFactura (facturaid INT ,seriemedicina INT ,cantidad INT);

DELIMITER $$
CREATE TRIGGER diminuirStock
AFTER INSERT ON DetalleFactura 
FOR EACH ROW
BEGIN
  UPDATE stockMedicina sm
    INNER JOIN Factura fa ON sm.farmaciaID = fa.farmaciaid
    INNER JOIN DetalleFactura df ON sm.seriemedicina = df.seriemedicina AND fa.faturaid=df.facturaID
    SET sm.stock = sm.stock - NEW.cantidad
    WHERE sm.FarmaciaID = fa.farmaciaid and sm.seriemedicina=NEW.facturaid;
END$$
DELIMITER ; 
INSERT INTO DetalleFactura VALUES (1,1,2)

查询 #1

SELECT * FROM stockMedicina;

| farmaciaID | seriemedicina | stock |
| ---------- | ------------- | ----- |
| 1          | 1             | 8     |

在 DB Fiddle 上查看


推荐阅读