使用来自多个表的数据更新表

时间:2016-05-27 12:25:29

标签: 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 | 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(一些复杂的子查询在这里)会更好吗? 任何人都可以帮助我,并且如此善良地为一些解释为什么这样的解决方案,而不是其他一些?看起来我似乎没有在更基本的层面得到什么,现在我正在努力。

提前致谢。

2 个答案:

答案 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