更改表将列添加为SELECT

问题描述 投票:-2回答:1

所以我想使用其他两个表通过选择将新列添加到表中。我尝试过这样的查询:

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服务器版本相对应的手册以获取正确的语法,以在'第1行的id_book = book_id group by order_id的书本联接详细信息中选择'select sum(price * pieces)'附近使用>

我的其他表格如下:

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;有效,但我真的不知道如何将其添加为新列:(

所以我想使用其他两个表通过选择将新列添加到表中。我尝试过这样的查询:ALTER TABLE订单添加成本DECIMAL(5,2)AS(从书中加入SELECT SUM(price * pieces ... ...)>

mysql select create-table alter-table
1个回答
0
投票

您无法指定数据填充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
© www.soinside.com 2019 - 2024. All rights reserved.