У меня возникла необходимость создать триггер, чтобы сохранить запись (полученную с помощью JOIN с другой таблицей) в таблице аудита, прежде чем ваши значения будут обновлены.Mysql Trigger query with join other table
Я плохо знаю триггеры, но я создал это.
Возможно ли это сработать?
Ошибка, является:
#1415 - Not allowed to return a result set from a trigger
* стол, на котором я применил триггер DESKTOP и я получить имя и фамилию поля относительной записи с объединением на столе пользователей или наоборот.
DELIMITER //
CREATE TRIGGER desktop_befUpd
BEFORE UPDATE
ON desktop FOR EACH ROW
BEGIN
SELECT
Name,Surname,id
FROM
users
JOIN
(
SELECT ID,IDAIFA,brand,model,id_users FROM desktop
) dev ON users.id = dev.id_users;
-- Insert record into audit table
INSERT INTO data_history
(IDAIFA,
dt_datetime,
Name,
Surname
)
VALUES
(dev.IDAIFA,
NOW(),
users.Name,
users.Surname);
END; //
DELIMITER ;
Вы можете обычно такие вещи работать с одним запросом 'INSERT INTO ... SELECT'; но триггеры очень сложны при ссылке на таблицу, к которой триггер подключен к триггеру, поэтому наличие подзапроса с «рабочим столом» может вызвать проблемы. Если вы пытаетесь «зарегистрировать» предыдущие значения, используя 'OLD. [Fieldname]' и 'NEW. [Fieldname]', более вероятно, что вы должны использовать. – Uueerdo
@Uueerdo it * будет * вызывать проблемы, в частности проблему «Mutating Table». Дэвид-88, можете ли вы разместить *** полный *** формат записи для *** обоих *** столов, пожалуйста? –