У меня есть три таблицы, задействованные в этом триггере
- очки (идентификатор INT, НЕ НУЛЬ, AUTO_INCREMENT, lenses_id INT, frames_id INT, clients_id INT, total_price FLOAT DEFAULT NULL)
- кадров ( id INT, цена FLOAT, FK1 INT, FK2 INT, FK3 INT)
- линзы (id INT, price_R FLOAT, цена_L FLOAT, FK1 INT)
Моя цель - заполнить столбец «total_price» в таблице «eyeglasses» с помощью триггера, добавляющего frames.price, lenses.price_R и lenses.price_L
мой неисправный триггер
DELIMITER $$
CREATE TRIGGER eyeglasses_price_BI BEFORE INSERT ON eyeglasses FOR EACH ROW
BEGIN
SET NEW.total_price =
(SELECT frames.price FROM eyeglasses,frames WHERE eyeglasses.frames_id = frames.id) +
(SELECT price_R FROM eyeglasses, lenses WHERE eyeglasses.lenses_id = lenses.id)+
(SELECT price_L FROM eyeglasses, lenses WHERE eyeglasses.lenses_id = lenses.id);
END; $$
DELIMITER ;
Данные для вставки в настольные очки
INSERT INTO eyeglasses (`lenses_id`,`frames_id`,`clients_id`)
VALUES
(1,1,1),
(2,2,2),
(3,3,3);
Я получаю код ошибки 1242 Подзапрос возвращает более 1 строки
Каким-то образом я должен назначить значение для каждой строки, используя итерацию, как для каждого i в List, но я не смог найти как это работает с триггером. Поскольку предложения where включают только первичные ключи, я думаю, что нет необходимости в промежуточной сумме GROUP BY
. Я пытался с помощью процедуры обновить таблицу и триггер, вызывающий процедуру, но я получаю ошибку, потому что я попробуйте вставить и обновить ту же таблицу.
Использование LIMIT 1 Мне удается заполнить столбец, но я получаю значение id 1 для всех трех записей. Использование одного SELECT в качестве подзапроса с INNER JOIN для каждой таблицы также не работает
Любая помощь очень ценится, я новичок, и это мой первый триггер, первый вопрос и даже первая база данных:)