5

假设我有一个名为 MyTable 的 MySQL 表,它看起来像这样:

+----+------+-------+
| Id | Type | Value |
+----+------+-------+
|  0 | A    |     1 |
|  0 | B    |     1 |
|  1 | A    |     2 |
|  1 | B    |     3 |
|  2 | A    |     5 |
|  2 | B    |     8 |
+----+------+-------+

而且,对于每个Id,我想插入一个新行,C其类型是相同行的类型和值Value的总和。该表的主键是,因此不存在 Id,Type 对重复的问题。ABId(Id, Type)

我可以用这个查询创建我想要的行:

SELECT MyTable_A.Id AS Id, 'C' AS Type, (A_Val + B_Val) AS Value FROM 
       (SELECT Id, Value AS A_Val FROM MyTable WHERE Type='A') AS MyTable_A
  JOIN (SELECT Id, Value AS B_Val FROM MyTable WHERE Type='B') AS MyTable_B
    ON MyTable_A.Id = MyTable_B.Id

给予:

+----+------+-------+
| Id | Type | Value |
+----+------+-------+
|  0 | C    |     2 |
|  1 | C    |     5 |
|  2 | C    |    13 |
+----+------+-------+

但问题是:如何使用此结果将生成的类型C行插入到中MyTable

有没有一种相对简单的方法可以通过查询来做到这一点,还是我需要编写一个存储过程?如果是后者,指导会有所帮助,因为我不太精通它们。

4

2 回答 2

4

您可以将该选择(如“您不需要as子句”稍作修改)附加到插入中。例如:

insert into MyTable (Id,Type,Value)
    select MyTable_A.Id, 'C', (A_Val + B_Val) from ...

假设您的查询实际上是正确的-我不对此进行评估:-)

作为进一步的例子,

insert into MyTable (Id,Type,Value)
    select Id+1000, 'C', Value from MyTable where Type = 'A'

将添加以下行:

+------+------+-------+
| Id   | Type | Value |
+------+------+-------+
| 1000 | C    |     1 |
| 1001 | C    |     2 |
| 1002 | C    |     5 |
+------+------+-------+
于 2010-05-16T13:50:58.467 回答
2

只需在您的 select 语句之前添加以下行:

INSERT MyTable (Id, Type, Value)
于 2010-05-16T13:50:44.307 回答