如何检查Variable是否为null,如果为null则将其设置为零



我有两个表,分别是表Item List和表Rekod。我尝试创建一个触发器,它将在记录更新的任何地方更新表item_list中特定项目的数量。然而,我在输入第一张唱片时遇到了一个问题。触发器将不起作用。只有当加减记录都已存在时,它才有效。我尝试了这个,但似乎我不能再更新我的rekod表以及

CREATE TRIGGER update_quantity AFTER UPDATE ON rekod
FOR EACH ROW
BEGIN
DECLARE add INT;
DECLARE minus INT;
DECLARE final INT;
SET add = 
SELECT (SELECT SUM(rekod.quantity) from rekod where rekod.status = "add" &&rekod.SKU=item_list.SKU )
FROM item_list ;
SET minus = 
SELECT (SELECT SUM(rekod.quantity) from rekod where rekod.status = "minus" &&rekod.SKU=item_list.SKU )
FROM item_list ;
IF add IS NULL
THEN 
SET add = 0;
END IF;
IF minus IS NULL
THEN
SET minus = 0;
END IF;
SET final = add - minus;
UPDATE item_list SET Quantity = final;
END;
//
delimiter ;```

如果有充分的理由在对rekod进行更新时同步所有时间列表,例如"当我们更新rekod时,我们一次更改10000行">

CREATE TRIGGER update_quantity AFTER UPDATE ON rekod
BEGIN
UPDATE 
item_list
INNER JOIN (SELECT sku, SUM(CASE WHEN status = 'add' THEN quantity ELSE -quantity END) as s FROM rekod) x
ON x.sku = item_list.sku
SET item_list.quantity = x.s;
END;
//
delimiter;

或者用于逐行保持项目列表同步,例如"我们在rekod中一次只更新一个项目">

CREATE TRIGGER update_quantity AFTER UPDATE ON rekod
FOR EACH ROW
BEGIN
UPDATE 
item_list
SET quantity = (SELECT SUM(CASE WHEN status = 'add' THEN quantity ELSE -quantity END) as s FROM rekod WHERE sku = new.sku) 
WHERE sku = new.sku;
END;
//
delimiter;

不确定你对插入做了什么——我本以为rekod的工作原理就像一个历史表,只有一长串的加减

就我个人而言,我只是把我想知道余额的每一次都加起来,而不是试图保持项目列表同步

测试每一行的状态并确定是否添加或减去就足够了

DELIMITER //
CREATE TRIGGER update_quantity AFTER UPDATE ON rekod
FOR EACH ROW
BEGIN    
IF NEW.status = "add"  THEN 
SET  @add = NEW.quantity;
ELSE
SET  @add = - NEW.quantity;
END IF;
UPDATE item_list SET Quantity = Quantity + @add WHERE sku = new.sku;
END;
//
delimiter ;

相关内容

  • 没有找到相关文章