У меня проблема с обновлением данных после создания триггера. Триггер объединяет 2 таблицы (люди и церкви) и должен обновлять churchID при обновлении названия церкви в таблице церквей.
Я пытался поместить подзапрос в оператор set, но я получил другую ошибку 1093 , в которой говорится, что вы не можете указать целевую таблицу 'people' в предложении FROM
.
Вот мой триггер
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';
Таблица сотрудников имеет следующие поля:
- PersonID int NOT NULL PK
- имя varchar NOT NULL
- фамилия варчар NOT NULL
- телефон varchar
- Элемент списка
- церковный варчар НЕ НУЛЬ
- churchID int NOT NULL fk (ссылки на churchID в таблице церквей)
- адрес varchar
- email varchar
- ноты Варчар
база данных церквей
- churchID INT NOT NULL pk
- имя varchar NOT NULL рк
- телефон VARCHAR
- адрес VARCHAR
- ноты VARCHAR
То, что я пытаюсь сделать с этим триггером, это то, что когда личная церковь изменяется, она автоматически меняет churchID на churchID, который выстраивается в таблице церквей
Например, если вы делаете
SELECT churchID
FROM churches
WHERE name = 'federated';
он вернул бы churchID, равный 1, или если бы вы сделали
`SELECT churchID`
FROM churches
WHERE name = 'EFree'
это вернул бы churchID 6
Так что после обновления, которое я сейчас делаю, должно возвращаться «имя» Марка и «churchID», равное 6.
Точная ошибка Error Code: 1054. Unknown column 'new_church' in 'field list'