Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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_Sum_Database Table - Fatal编程技术网

MySQL对两个表字段求和并更新

MySQL对两个表字段求和并更新,mysql,sql,sum,database-table,Mysql,Sql,Sum,Database Table,我正在尝试如何按id对两个表求和并更新其中一个表: 斯托克 --------- |P | U | |-------| | 1 | 1 | | 2 | 0 | | 3 | 3 | --------- -------- |P | U | |--------| | 1 | -2 | | 2 | -2 | | 3 | 2 | --------- 斯托克 --------- |P | U | |-------| | 1 | -3 | | 2 | -2 | | 3 | -1 | ---------

我正在尝试如何按id对两个表求和并更新其中一个表:

斯托克

---------
|P | U |
|-------|
| 1 | 1 |
| 2 | 0 |
| 3 | 3 |
---------
--------
|P | U |
|--------|
| 1 | -2 |
| 2 | -2 |
| 3 | 2 |
---------
斯托克

--------- 
|P | U |
|-------|
| 1 | -3 |
| 2 | -2 |
| 3 | -1 |
---------
我想要的结果是:

斯托克

---------
|P | U |
|-------|
| 1 | 1 |
| 2 | 0 |
| 3 | 3 |
---------
--------
|P | U |
|--------|
| 1 | -2 |
| 2 | -2 |
| 3 | 2 |
---------
我的问题是:

UPDATE STOCKA,STOCKB
SET STOCKA.U =  STOCKA.U - ABS(STOCKB.U)
WHERE
STOCKA.P = STOCKB.P

使用JOIN而不是尝试在UPDATE语句中传递两个表:

UPDATE STOCKA a
JOIN STOCKB b
    ON a.P = b.P
SET a.U =  a.U - ABS(b.U)

如果“b”表中每个
p
只有一行,那么问题中的查询应该可以工作。如果可以有多行,则先聚合,然后加入:

UPDATE STOCKA a join
       (select P, sum(abs(u)) as bu
        from STOCKB
        group by P
       ) b
       on a.P = b.P
    SET a.U =  a.U - b.bu;

您的查询有什么问题?在我的查询中,结果值是错误的,我使用hjpotter92的答案。谢谢:)谢谢!为修改我的帖子和正确答案。这太棒了D