繁体   English   中英

MySQL订单表中订单项的摘要价格

[英]MySQL Summary price of order items in orders table

我有三个表:

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 有可能吗? 还是应该以更适当的方式更改数据库方案?

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

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

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

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.

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

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值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM