【问题标题】:Alter table add column as SELECT更改表添加列作为 SELECT
【发布时间】:2020-08-25 05:59:28
【问题描述】:

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

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);

我得到错误:

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'select sum(price*pieces) from book join details on id_book=book_id group by order_id '附近使用正确的语法

我的其他表是这样的:

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

【问题讨论】:

  • 该错误继续告诉您有关错误位置的更多信息始终向我们显示所有错误消息,而不仅仅是其中的一部分
  • 不要认为这是一个法律概念。考虑只修改表,然后编写一个触发器以在创建每个新行时自动填充值
  • 对不起,现在已经编辑了:)

标签: mysql select create-table alter-table


【解决方案1】:

您不能指定数据来填充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

【讨论】:

    猜你喜欢
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 2020-11-13
    • 1970-01-01
    相关资源
    最近更新 更多