mysql - 将表 1 的单位列更新为表 2

标签 mysql sql sql-update sum

表格:

mysql> select * from table1;
+------+------+------+
| no   | nm   | unit |
+------+------+------+
|    1 | ABC  |   10 |
|    2 | ACX  |   20 |
|    3 | AYU  |   30 |
+------+------+------+
3 rows in set (0.01 sec)

mysql> select * from table2;
+------+------+------+
| no   | nm   | unit |
+------+------+------+
|    1 | ABC  |   40 |
|    2 | ACX  |   20 |
+------+------+------+
2 rows in set (0.00 sec)

要求的输出:

mysql> select * from table2;
+------+------+------+
| no   | nm   | unit |
+------+------+------+
|    1 | ABC  |   50 |
|    2 | ACX  |   40 |
|    3 | AYU  |   30 |
+------+------+------+
3 rows in set (0.00 sec)

最佳答案

如果您想更新 Table2 作为所需的输出,那么您需要先更新已经存在的行,然后从 Table1 插入新行:

您可以使用 JOIN 更新单元:

UPDATE Table2 t2
  JOIN 
       (SELECT nm, SUM(unit) unit
       FROM
       (
           SELECT * FROM Table1 t1
           UNION ALL
           SELECT * FROM Table2 t2
       ) tbl
       GROUP BY nm
       ) tbl1
    ON t2.nm = tbl1.nm
   SET t2.unit = tbl1.unit;

然后您可以添加表 1 中不存在于表 2 中的行(例如 nm=AYU)

INSERT INTO Table2
SELECT t1.`no`, t1.`nm`, t1.`unit`
  FROM Table1 t1
  LEFT JOIN Table2 t2
    ON t1.nm = t2.nm
 WHERE t2.nm IS NULL;

输出:

SELECT * FROM Table2;
| NO |  NM | UNIT |
|----|-----|------|
|  1 | ABC |   50 |
|  2 | ACX |   40 |
|  3 | AYU |   30 |

参见this SQLFiddle

记住先更新表格。否则它会复制单位。

关于mysql - 将表 1 的单位列更新为表 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18584152/

相关文章:

Mysql添加自增列

sql - SPARK : failure: `` union '' expected but ` (' found

mysql - 如果一个 Column 递增,然后在同一个 UPDATE 查询中用于设置另一个 Column 的值,它将保存哪个值?

mysql - codeigniter 生成的更新中的语法错误

php - MySQL 工作台与 phpMyAdmin

PHP 和 MYSQL : Inserting Foreign Key

php - JSON 在我的应用程序中返回 [null,null]

java - 从第二张表中获取计数(生成的发票数量)和从第三张表中获取总和(订单总数)-MySQL

mysql - SQL通过id从另一个表检索值并显示总计

mysql - 尝试在 mysql 中运行更新查询时出现语法错误