Триггер mysql перед вставкой обновляет столбец, добавляя значения из других таблиц t1.total = t2.subtotal1 + t3.subtotal2 + t3.subtotal3 Код ошибки 1242 - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть три таблицы, задействованные в этом триггере

  1. очки (идентификатор INT, НЕ НУЛЬ, AUTO_INCREMENT, lenses_id INT, frames_id INT, clients_id INT, total_price FLOAT DEFAULT NULL)
  2. кадров ( id INT, цена FLOAT, FK1 INT, FK2 INT, FK3 INT)
  3. линзы (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 для каждой таблицы также не работает

Любая помощь очень ценится, я новичок, и это мой первый триггер, первый вопрос и даже первая база данных:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...