我坚持这个。我有三张桌子:
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));
但是返回 ERROR 1242(21000):子查询返回的行数超过1行
我做错了什么?使用更新CLIENTS(一些复杂的子查询在这里)会更好吗? 任何人都可以帮助我,并且如此善良地为一些解释为什么这样的解决方案,而不是其他一些?看起来我似乎没有在更基本的层面得到什么,现在我正在努力。
提前致谢。
答案 0 :(得分:2)
我认为您可以在子查询中执行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
);
答案 1 :(得分:0)
你的语法有点偏。从其他表更新的一般语法是:
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