我不确定我是否应该将此作为我现有问题的编辑,但我决定反对它,因为这是一个不同的问题。触发器处理两个表:用户{id,name,status}产品{id,title,price,userid,status};
我希望当用户表更新时,条目的状态更改为2,用户所做的所有产品将更改为i(用于非活动状态)
CREATE OR REPLACE TRIGGER update_offering_status
BEFORE UPDATE ON users
FOR EACH ROW
WHEN (new.status = 'i')
BEGIN
UPDATE offering
SET status = 'i'
WHERE userid = offering.userid;
END;
问题是它正在将所有提供状态更改为i。
我认为问题是
WHERE userid = offering.userid;
如果产品的用户标识与正在更新的用户的用户标识匹配,则标记为非活动状态。我不知道如何编写代码。
答案 0 :(得分:2)
你应该这样做:
CREATE OR REPLACE TRIGGER update_offering_status BEFORE UPDATE ON users
FOR EACH ROW
WHEN (NEW.status = 'i')
BEGIN
UPDATE offering
SET status = 'i'
WHERE userid = :NEW.id
END;
您没有特定地引用任何用户。您正在更新所有行,因为userid = offering.userid
与执行offering.userid = offering.userid
相同,而且总是如此。