Mysql 使用多个表中的数据更新表
我被困在这件事上了。我有三张桌子:Mysql 使用多个表中的数据更新表,mysql,sql,Mysql,Sql,我被困在这件事上了。我有三张桌子: Table 1: **ORDERS** | ORDER_NO | PRODUCT_NO | CLIENT_NO | UNITS | ORDER_DATE | Table 2: **CLIENTS** | CLIENT_NO | NAME | LOCATION | SELLER_NO | OWES | OVERPAID | CREDIT_LIMIT | Table 3: **PRODUCTS** | PRODUCT_NO | DESCRIPTI
Table 1:
**ORDERS**
| ORDER_NO | PRODUCT_NO | CLIENT_NO | UNITS | ORDER_DATE |
Table 2:
**CLIENTS**
| CLIENT_NO | NAME | LOCATION | SELLER_NO | OWES | OVERPAID | CREDIT_LIMIT |
Table 3:
**PRODUCTS**
| PRODUCT_NO | DESCRIPTION | UNIT_PRICE | AVAILABLE_STOCK |
现在,我要做的是更新表CLIENTS中的OWES列,使其包含所有订单的总金额
就我所知:
update CLIENTS set OWES = (select sum(o.UNITS) from ORDERS o where CLIENTS.CLIENT_NO = o.CLIENT_NO);
这似乎可以很好地获得总订单数,但我必须将其乘以给定项目的价格(无论订单是针对哪个项目的),我感到困惑
例如,我试过:
update CLIENTS set OWES = ( select sum(o.UNITS) from ORDERS o where CLIENTS.CLIENT_NO = o.CLIENT_NO)*(select UNIT_PRICE from PRODUCTS where PRODUCT_NO= any(select PRODUCT_NO from ORDERS));
但这将返回错误1242(21000):子查询返回超过1行
我做错了什么?将更新客户机用作(此处有一些复杂的子查询)是否更好?
有谁能帮我一个忙,好心地解释一下为什么是这样的解决方案而不是其他的?看起来我没有得到更基本的东西,现在我在挣扎
提前感谢。我认为您可以在子查询中执行一个
连接
,并执行适当的聚合:
update CLIENTS
set OWES = (select sum(o.UNITS * p.unit_price)
from ORDERS o join
products p
on o.product_no = p.product_no
where CLIENTS.CLIENT_NO = o.CLIENT_NO
);
我认为您可以在子查询中执行一个
join
,并执行适当的聚合:
update CLIENTS
set OWES = (select sum(o.UNITS * p.unit_price)
from ORDERS o join
products p
on o.product_no = p.product_no
where CLIENTS.CLIENT_NO = o.CLIENT_NO
);
你的语法有点错误。从其他表更新的通用语法为:
UPDATE table1
JOIN table2 ON table2.mycolumn = table1.mycolumn
JOIN (
SELECT foo, SUM(bar) as sumbar FROM table3) table3sum ON table3sum.foo = table1.foo
SET
table1.foo = table2.bar,
table1.baz = table3sum.sumbar
你的语法有点错误。从其他表更新的通用语法为:
UPDATE table1
JOIN table2 ON table2.mycolumn = table1.mycolumn
JOIN (
SELECT foo, SUM(bar) as sumbar FROM table3) table3sum ON table3sum.foo = table1.foo
SET
table1.foo = table2.bar,
table1.baz = table3sum.sumbar
非常感谢你。我怀疑我在脑子里想得太多了。它就像一个符咒!非常感谢你。我怀疑我在脑子里想得太多了。它就像一个符咒!