как мне подсчитать в таблице с данными из другой таблицы? mysql

#mysql #sql

#mysql #sql

Вопрос:

у меня проблема с триггером, который мне нужно создать, я показываю вам, что у меня есть, а затем в чем заключается вопрос.

 CREATE TABLE IF NOT EXISTS `book` (
  `ISBN` bigint(13) NOT NULL,
  `Title` varchar(128) NOT NULL,
  `Version` smallint(6) DEFAULT NULL,
  `Year` year(4) DEFAULT NULL,
  `Price` decimal(10,2) DEFAULT NULL,
  PRIMARY KEY (`ISBN`)
)

CREATE TABLE IF NOT EXISTS `bookauthor` (
  `ISBN` bigint(13) NOT NULL,
  `BSN` int(9) NOT NULL,
  PRIMARY KEY (`ISBN`,`BSN`),
  KEY `bookauthor_ibfk_2` (`BSN`)
)

CREATE TABLE IF NOT EXISTS `publisher` (
  `name` varchar(48) NOT NULL,
  `location` varchar(48) NOT NULL,
  `sales volume` double NOT NULL,
  `logo` longblob NOT NULL
)

CREATE TABLE IF NOT EXISTS `sales` (
  `date` date NOT NULL,
  `publisher` varchar(48) NOT NULL,
  `isbn` int(48) NOT NULL,
  `amount_sold` int(48) NOT NULL
);
  

мой вопрос в том,
что я хочу иметь триггер, который обновляет объем продаж в таблице publisher с объемом продаж, полученным при обновлении таблицы продаж. это должно произойти у определенного издателя, и триггеру нужно что-то вроде (amount_sold * price), но я понятия не имею, как это сделать: (

Комментарии:

1. Что произойдет, если book будет обновлено?

2. пока ничего не происходит, когда книга обновляется.

Ответ №1:

 CREATE TRIGGER
        trg_sales_ai
AFTER INSERT
ON      sales
FOR EACH ROW
BEGIN
        UPDATE  publisher p
        CROSS JOIN
                book b
        SET     p.`sales volume` = p.`sales volume`   NEW.amount_sold * b.price
        WHERE   p.name = NEW.publisher
                AND b.ISBN = NEW.isbn
END;
  

Комментарии:

1. спасибо за помощь: D

2. @user3541687: если ответ вам помог, пожалуйста, отметьте его выбранным (установите зеленый флажок под подсчетом голосов)

3. @user3541687: проверьте разделитель. Однако я не проверял синтаксис, поэтому может потребоваться некоторая доработка.

4. что нужно разделить с помощью разделителя, чем?? потому что нет ничего с двойным результатом. или я не получаю функцию разделителя сейчас?

5. @user3541687: используйте что-то другое, кроме точки с запятой, для разделителя запросов на вашем MySQL клиенте.