MYSQL 根据其他列触发具有相同列的更新列

MYSQL Trigger Update column with same column based on other column

我有以下 table.

order_id          code             value
   1            sub_total          5.00
   1            shipping           5.00
   1            total              10.00
   2            sub_total          3.00
   2            shipping           6.00
   2            total              9.00

有时 sub_total 需要更新(例如添加产品),总数也需要更新。我创建了一个触发器来更新 sub_total。我还要如何根据 sub_total 和运费更新总数?

我尝试了以下操作:

CREATE TRIGGER after_order_product_update AFTER UPDATE ON order_product FOR EACH ROW
BEGIN
    UPDATE `order_total` 
    SET `value` = NEW.`total` WHERE `order_id` = NEW.`order_id` AND `code` = 'sub_total'; 
    UPDATE `order_total` 
    SET `value` = (SELECT `value` FROM `order_total` WHERE `code` = 'shipping' AND `order_id` = NEW.`order_id`) + (SELECT `value` FROM `order_total` WHERE `code` = 'sub_total' AND `order_id` = NEW.`order_id`) WHERE `code` = 'total' AND `order_id` = NEW.`order_id`;
END;

这里我收到一个"You can't specify target table 'oc_order_total' for update in FROM clause Error No: 1093"

CREATE TRIGGER after_order_product_update AFTER UPDATE ON order_product FOR EACH ROW
BEGIN
    DECLARE SBvalue VARCHAR(32);
    DECLARE SHIPvalue VARCHAR(32);

    UPDATE `order_total` SET `value` = NEW.`total` WHERE `order_id` = NEW.`order_id` AND `code` = 'sub_total'; 


    SET SBvalue = (SELECT `value` FROM `order_total` WHERE `code` = 'sub_total' AND `order_id` = NEW.`order_id`);
    SET SHIPvalue = (SELECT `value` FROM `order_total` WHERE `code` = 'shipping' AND `order_id` = NEW.`order_id`);

    UPDATE `oc_order_total` SET `value` = `SBvalue` + `SHIPvalue` WHERE `code` = 'total' AND `order_id` = NEW.`order_id`;
END;

这里我收到一个 "Subquery returns more than 1 row" 错误。

SET SBvalue = (SELECT `value` FROM `order_total` WHERE `code` = 'sub_total'
                AND `order_id` = NEW.`order_id` LIMIT 1);
SET SHIPvalue = (SELECT `value` FROM `order_total` WHERE `code` = 'shipping'
               AND `order_id` = NEW.`order_id` LIMIT 1);

第二次查询错误给limit 1..

希望对您有所帮助

BEGIN
UPDATE `order_total` 
SET `value` = (
    (SELECT `value` FROM (
        SELECT `value` FROM `oc_order_total` 
            WHERE `code` = 'sub_total' AND `order_id` = NEW.`order_id`) 
    AS mySubTotalTable 
    WHERE `order_id` = NEW.`order_id`) + 
    (SELECT `value` FROM (
        SELECT `value` FROM `oc_order_total` 
            WHERE `code` = 'shipping' AND `order_id` = NEW.`order_id`) 
    AS myShippingTable 
    WHERE `order_id` = NEW.`order_id`))
WHERE `code` = 'total' AND `order_id` = NEW.`order_id`;
END