Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用多个表中的数据更新表_Mysql_Sql - Fatal编程技术网

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

非常感谢你。我怀疑我在脑子里想得太多了。它就像一个符咒!非常感谢你。我怀疑我在脑子里想得太多了。它就像一个符咒!