Изменить таблицу добавить столбец как SELECT - PullRequest
0 голосов
/ 09 мая 2020

Итак, я хотел добавить в свою таблицу новый столбец, сделанный из выборки с использованием двух других таблиц. Я пробовал такой запрос:

ALTER TABLE order ADD cost DECIMAL(5,2) AS (SELECT SUM(price*pieces) FROM book JOIN details ON id_book=book_id GROUP BY order_id);

И получаю ошибку:

ОШИБКА 1064 (42000): у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии MySQL сервера, чтобы найти правильный синтаксис для использования рядом с 'выберите сумму (цена * штук) из сведений о присоединении к книге на id_book = book_id group by order_id' в строке 1

Другие мои таблицы выглядят так:

CREATE TABLE details (
id_d INT(10) NOT NULL AUTO_INCREMENT,
book_id INT(10) DEFAULT NULL,
order_id INT(10) DEFAULT NULL,
pieces INT(10) DEFAULT NULL
...
CREATE TABLE book (
id_book INT(10) NOT NULL AUTO_INCREMENT,
price DECIMAL(5,2) DEFAULT NULL,
...

Этот SELECT SUM(price*pieces) FROM book JOIN details ON id_book=book_id GROUP BY order_id; работает, но я действительно не знаю, как добавить это в качестве нового столбца :(

1 Ответ

0 голосов
/ 09 мая 2020

Вы не можете указать данные для заполнения столбца в операторе ALTER TABLE. Это нужно сделать в отдельном операторе UPDATE.

ALTER TABLE order ADD cost DECIMAL(5,2) DEFAULT 0;

UPDATE order AS o
JOIN (
    SELECT d.order_id, SUM(d.pieces, * b.price) AS cost
    FROM details AS d
    JOIN book AS b ON d.book_id = b.id_book
    GROUP BY d.order_id) AS d ON d.order_id = o.order_id
SET o.cost = d.cost
...