MYSQL - 更新表中的每一行,以在其他表上设置具有其他特定值的列

时间:2016-01-06 04:30:06

标签: mysql sql-update

我有两张这样的桌子:

表A 的 CES | REG |年| INC | OUC
---------------------------------------
C1 |美国| 2015年| 0 | 0
C2 |英国| 2014 | 0 | 0
C3 | BR | 2015年| 0 | 0
C1 | RU | 2016 | 0 | 0
C1 |美国| 2016 | 0 | 0

表B
CES | REG |年| VAL | DIS(%)
-----------------------------------------
C1 |美国| 2015年| 100 | 10个
C1 |美国| 2015年| 200 | 20个
C1 | RU | 2016 | 200 | 10个
C1 |美国| 2016 | 500 | 20个
C2 |英国| 2014 | 200 | 20个
C2 |英国| 2014 | 500 | 10个
C3 | BR | 2015年| 1000 | 30个
C3 | BR | 2015年| 500 | 10个
C3 | BR | 2015年| 200 | 20个

我想更新表B中的表A,其中year = 2015,如下所示:
CES | REG |年| INC | OUC
---------------------------------------
C1 |美国| 2015年| 250 | 0
C2 |英国| 2014 | 0 | 0
C3 | BR | 2015年| 1310 | 0
C1 | RU | 2016 | 0 | 0
C1 |美国| 2016 | 0 | 0

*)注意:
TABLE_A.INC = SUM(TABLE_B.VAL * TABLE_B.DIS / 100) 表B表B中的更新,其中CES,REG和YEAR相同

for C1,USA,2015:
第1行+第2行表B =(100 *(100-10)/ 100)+(200 *(100-20)/ 100)

对于C3,BR,2015:
第7行+第8行+第9行表B =(1000 *(100-30)/ 100)+(500 *(100-10)/ 100)+(200 *(100-20)/ 100)

可能是单个查询吗? THX

=============================================== =========
那好吧... 我昨天得到了答案......

UPDATE a SET inc = (SELECT SUM(val*(100-dis)/100) FROM b WHERE a.ces=b.ces AND a.reg=b.reg AND a.year=b.year) WHERE a.year = '2015'

请求帮助:D

1 个答案:

答案 0 :(得分:0)

尝试下面的内容:

UPDATE TABLE_A A, TABLE_B B
SET INC = (B.`VAL` * B.`DIS` / 100)
WHERE A.`CES` = B.`CES`
    AND A.`REG`  = B.`REG` 
    AND A.`YEAR` = B.`YEAR`
    ;

SQL小提琴:http://sqlfiddle.com/#!9/55519