当使用WHERE IN时,MySQL触发器不会更新多行

时间:2016-09-29 06:56:39

标签: mysql sql mariadb

我有两张桌子:

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的第一行)。

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

如果NEW.items1,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