#mysql #sql #database
Вопрос:
Я пытаюсь обновить количество товаров в таблице product_stock (когда происходит ОБНОВЛЕНИЕ в таблице Product, оно обновит количество продуктов в таблице product_stock). Но ошибка запущена -> Код ошибки: 1054. Неизвестный столбец «product.id_product» в «предложении where»
CREATE TABLE IF NOT EXISTS `product`(
`id_product`INT(11) NOT NULL AUTO_INCREMENT,
`unitarya_value`DECIMAL NOT NULL,
`minimum_quantity` INT(11) NOT NULL,
PRIMARY KEY(`id_product`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;
CREATE TABLE IF NOT EXISTS `stock_product`(
`id_stock_product`INT(11) NOT NULL AUTO_INCREMENT,
`current_quantity`INT(11) NOT NULL,
`id_product`INT(11) NOT NULL,
PRIMARY KEY(`id_stock_product`),
FOREIGN KEY(`id_product`)
REFERENCES `product` (`id_product`)
ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;
DELIMITER $
CREATE TRIGGER updateProductquantity
BEFORE UPDATE ON product
FOR EACH ROW
BEGIN
DECLARE qtt INT DEFAULT 50;
UPDATE stock_product set current_quantity = current_quantity qtt
WHERE stock_product.id_product = product.id_product ;
END; $
Ответ №1:
В BEFORE UPDATE
триггере столбцы из product
таблицы имеют префикс NEW.column
и OLD.column
, а не само имя таблицы , поэтому последняя часть WHERE
предложения может быть:
WHERE stock_product.id_product = NEW.id_product ;
Кроме того, в качестве примечания: если нет других планов с qtt
переменной, вы можете использовать 50
значение в SET
предложении без переменной:
UPDATE stock_product SET current_quantity = current_quantity 50