MySQL根据另一个表中的条目触发从一个表添加/减少
所以,我有两个表:转移和库存 我想做的是,当在传输表中输入某个内容时,它将更改库存表中的一个条目 我需要的一个例子是: 假设有一个叫琼斯博士的人和另一个叫史密斯博士的人。琼斯博士总共有30英镑,史密斯博士有10英镑。现在,假设琼斯博士给史密斯博士10英镑,我需要库存表中琼斯博士账户总额的-10英镑,史密斯博士账户总额的+10英镑。因此,当您刷新该表时,它会在总计列中说明Smith博士的余额为20英镑,而Jones博士的余额现在也为20英镑 我想通过一个触发器来实现这一点。我目前有以下情况:MySQL根据另一个表中的条目触发从一个表添加/减少,mysql,Mysql,所以,我有两个表:转移和库存 我想做的是,当在传输表中输入某个内容时,它将更改库存表中的一个条目 我需要的一个例子是: 假设有一个叫琼斯博士的人和另一个叫史密斯博士的人。琼斯博士总共有30英镑,史密斯博士有10英镑。现在,假设琼斯博士给史密斯博士10英镑,我需要库存表中琼斯博士账户总额的-10英镑,史密斯博士账户总额的+10英镑。因此,当您刷新该表时,它会在总计列中说明Smith博士的余额为20英镑,而Jones博士的余额现在也为20英镑 我想通过一个触发器来实现这一点。我目前有以下情况: DE
DELIMITER $$
CREATE TRIGGER update_inventory_through_transfer AFTER INSERT ON Transfers
FOR EACH ROW
BEGIN
UPDATE Inventory
SET Inventory.total = SELECT SUM (IF (owner = NEW.owner, -total, total)) FROM Transfers WHERE owner = NEW.owner
END$$
DELIMITER;
谁能帮我找出哪里出了问题?
谢谢您的问题不清楚db的结构,但是假设transfer知道所有者和资金被转移到谁,那么触发器应该包含两个简单的更新,因为每行都有一个触发器,所以没有必要对转账进行求和
drop table if exists transfer,inventory;
create table transfer (owner int,total int,tfr_to int);
create table inventory (owner int,total int);
insert into inventory values
(1,30),(2,10);
drop trigger if exists t;
DELIMITER $$
CREATE TRIGGER t AFTER INSERT ON transfer
FOR EACH ROW
BEGIN
UPDATE inventory t1
SET t1.total = t1.total + new.total
where t1.owner = new.tfr_to;
update inventory t1
set t1.total = t1.total - new.total
where t1.owner = new.owner;
END $$
DELIMITER ;
insert into transfer values (1,10,2);
select * from transfer;
+-------+-------+--------+
| owner | total | tfr_to |
+-------+-------+--------+
| 1 | 10 | 2 |
+-------+-------+--------+
1 row in set (0.02 sec)
select * from inventory;
+-------+-------+
| owner | total |
+-------+-------+
| 1 | 20 |
| 2 | 20 |
+-------+-------+
2 rows in set (0.00 sec)
错误消息是什么,或者到目前为止您尝试了什么?错误消息是标准1064:您的SQL语法中有一个错误:如果owner=NEW.owner,请选择SUM,-total,其中owner=NEW的传输总计。我需要通过触发器来完成这项工作,我认为这会起作用,但显然不是grrr。要修复语法错误,请将select括在括号中并终止它-但我认为逻辑不正确,