【问题标题】:MYSQL - update each row from a table to set a column with other specific value on other tableMYSQL - 更新表中的每一行以在其他表上设置具有其他特定值的列
【发布时间】:2016-01-06 04:30:06
【问题描述】:

我有 2 个这样的表:

表 A
CES |注册 |年份 |公司 | OUC
----------------------------------------------------
C1 |美国 | | 2015 年 | 0   | 0
C2 |英国    | 2014 年 | 0   | 0
C3 | BR   | 2015 年 | 0   | 0
C1 |俄罗斯    | 2016 年 | 0   | 0
C1 |美国 | | 2016 年 | 0   | 0

表 B
CES |注册 |年份 |值 | DIS(%)
------------------------------------------
C1 |美国 | | 2015 年 | 100   | 10
C1 |美国 | | 2015 年 | 200   | 20
C1 |俄罗斯    | 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,其中年份 = 2015,如下所示:
CES | |注册 |年份 |公司 | OUC
----------------------------------------------------
C1 |美国 | | 2015 年 | 250 | 0
C2 |英国    | 2014 年 | 0                                                0
C3 | BR   | 2015 年 | 1310 | 0
C1 |俄罗斯    | 2016 年 | 0                                                0
C1 |美国 | | 2016 年 | 0                                                0

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

对于 C1,美国,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)

可以是单个查询吗?
谢谢

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

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

【问题讨论】:

  • 不清楚您是如何获得更新后出现在TABLE A 中的INC 值。

标签: mysql sql-update


【解决方案1】:

试试下面:

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

【讨论】:

    猜你喜欢
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 2012-04-20
    • 2022-08-18
    • 1970-01-01
    • 2022-11-18
    相关资源
    最近更新 更多