我在创建触发器后更新数据时遇到了问题。触发器连接两个表(人员和教会),并且应该在更新教堂表中的教会名称时更新churchID。
我尝试将子查询放在set语句中,但是我得到了一个不同的错误1093,表示您不能在FROM
子句中指定目标表'people‘。
这是我的扳机
delimiter $$
CREATE TRIGGER churchID_update_change AFTER UPDATE ON people
FOR EACH ROW
BEGIN
IF NEW.church != OLD.church THEN
UPDATE people as p, (SELECT DISTINCT c.churchID
FROM churches c LEFT OUTER JOIN people p
ON c.name = p.church
WHERE NEW.church = c.name) as new_church
SET p.churchID = new_church
WHERE NEW.church = NEW.church;
END IF;
END
$$
delimiter ;
下面是我想要做的更新:
UPDATE people
SET church = 'Efree'
WHERE firstname = 'Mark';
people表有以下字段:
教堂数据库是
我试图用这个触发器做的是,每当一个人的教会被更改时,它就会自动地将churchID更改为churchID,这个churchID在教堂表中排列。
例如,如果你这样做
SELECT churchID
FROM churches
WHERE name = 'federated';
它将返回1的churchID,或者如果您返回了
`SELECT churchID`
FROM churches
WHERE name = 'EFree'
它将返回6的churchID
因此,在我现在进行的更新之后,它应该返回Mark的‘Mark’和6的'churchID‘。
准确的误差是Error Code: 1054. Unknown column 'new_church' in 'field list'
发布于 2019-05-21 07:03:31
经过大量的谷歌搜索,我终于找到了答案。我发现我不需要UPDATE
子句,为了在SET
子句中使用子查询,我需要将子查询嵌套在另一个子查询中。这是我的固定密码:
delimiter $$
CREATE TRIGGER churchID_people_updateTrig BEFORE UPDATE on people
FOR EACH ROW
BEGIN
IF NEW.church != OLD.church THEN
SET new.churchID = (SELECT * FROM (SELECT DISTINCT c.churchID
FROM churches c LEFT OUTER JOIN people p
ON c.name = p.church
WHERE p.church = NEW.church) as x);
END IF;
END
$$
delimiter ;
https://stackoverflow.com/questions/56224853
复制