我有三张桌子:
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
。有可能吗?或者我应该以更合适的方式更改我的数据库方案?
答案 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
值。