4

表:

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)
4

4 回答 4

1

如果要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;

然后您可以从 Table1 添加 Table2 上不存在的行(例如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 |

看到这个 SQLFiddle

记得先更新表格。否则它将复制单位。

于 2013-09-03T05:13:26.987 回答
0

选择

无,纳米总和(单位)

(

从表 1 中选择 *

联合所有

从表 2 中选择 *

) 作为临时组 no,nm;

于 2013-09-03T05:07:38.870 回答
0

如果您只想从两个表中选择数据作为所需的输出,请尝试以下操作:

SELECT MIN(no) NO, nm, SUM(unit) unit
FROM
(
    SELECT * FROM Table1 t1
    UNION ALL
    SELECT * FROM Table2 t2
) tbl
GROUP BY nm;

输出:

| NO |  NM | UNIT |
|----|-----|------|
|  1 | ABC |   50 |
|  2 | ACX |   40 |
|  3 | AYU |   30 |

看到这个 SQLFiddle

于 2013-09-03T04:46:28.910 回答
0

我环顾四周,看到了这个我认为更明智的答案,应该在数据库操作之外进行算术运算。但是,如果您希望为此使用 SQL,我稍后会将其编辑到此答案中。

于 2013-09-03T04:45:49.297 回答