我有两张桌子:
table1
------
id, status
table2
------
id,items
status
中的{p> table1
可以是"付费","待定","请求"。
items
中的 table2
包含逗号分隔的id
table1
。
即
table1
------
1 | Requested
2 | Requested
3 | Pending
table2
------
1 | 1,2
我想更新status
table1
来自"请求"到"付费"每当任何项目添加到items
的字段table2
中时。
此外,我想将status
重置为"请求"如果在更新时从table2 items
字段中删除了该项目。
因此创建了3个触发器:
1)INSERT之后:
CREATE TRIGGER `Update status` AFTER INSERT ON `table2`
FOR EACH ROW BEGIN
UPDATE table1
SET status = 'Paid'
WHERE id IN (NEW.items);
END
2)更新前:
CREATE TRIGGER `Reset on update`
BEFORE UPDATE ON `table2`
FOR EACH ROW BEGIN
UPDATE table1 SET status = 'Requested' WHERE
id IN (OLD.items)
END
3)更新后:
CREATE TRIGGER `New status on update` AFTER UPDATE ON `table2`
FOR EACH ROW BEGIN
UPDATE table1 SET status = 'Paid' WHERE id IN (NEW.items);
END
问题是触发器只更新了上述所有触发器中table1的一行(逗号分隔id
的第一行)。
我错过了什么吗?
答案 0 :(得分:1)
如果NEW.items
为1,2,3,4,5
,则UPDATE table1 SET status = 'Paid' WHERE id IN (NEW.items);
语句实际上意味着:
UPDATE table1 SET status = 'Paid' WHERE id IN ('1,2,3,4,5');
而不是:
UPDATE table1 SET status = 'Paid' WHERE id IN (1,2,3,4,5);
'1,2,3,4,5'
然后被转换为整数并变为1
。