MySQL订单表中订单商品的汇总价格

时间:2016-12-18 00:17:55

标签: mysql sql

我有三张桌子:

CREATE TABLE IF NOT EXISTS 'phones' (
  phone_id    INT PRIMARY KEY,
  name        VARCHAR(255) NOT NULL,
  price       FLOAT        NOT NULL,
  description TEXT
);

CREATE TABLE IF NOT EXISTS 'orders' (
  order_id INT PRIMARY KEY,
  date     DATE NOT NULL ,
  summary  FLOAT NOT NULL
);

CREATE TABLE IF NOT EXISTS 'order_items' (
  phone_id INT,
  order_id INT,
  quantity INT NOT NULL,
  FOREIGN KEY (phone_id) REFERENCES phones (phone_id),
  FOREIGN KEY (order_id) REFERENCES orders (order_id)
);

如何将整个订单的summary价格设置为电话价格总和*其数量:phones.price * order_items.quantity。有可能吗?或者我应该以更合适的方式更改我的数据库方案?

3 个答案:

答案 0 :(得分:1)

如果要对所有记录执行此操作,请使用内部联接。

update order
set summary = phones.price * order_items.quantity;
from order
inner join order_items
on order.order_id = order_items.order_id
inner join phones
on order_items.phone_id = phones.phone_id

答案 1 :(得分:0)

您可以通过加入表格并更新订单摘要来实现,如下所示。

Update orders o
Inner join order_items oi On oi.order_id = o.order_id
Inner join phones p on p.phone_id = oi.phone_id
Set o.summary = p.prices * oi.quantity.

答案 2 :(得分:0)

是的,您可以这样做,但您需要在子查询中汇总价格:

Update orders o left join
       (select oi.order_id, sum(p.prices * oi.quantity) as summary
        from order_items oi join
             phones p
             on p.phone_id = oi.phone_id
        group by oi.order_id
       ) oo
       on oo.order_id = o.order_id
    set o.summary = oo.summary;

注意:left join确保所有订单都会更新。如果该商品没有订单行,则summary将设置为NULL。使用inner join时,不匹配的订单不会更改summary值。