假设我有一个名为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
是类型A
和B
的总和相同Id
行的值。此表的主键是(Id, Type)
,因此不存在重复ID,类型对的问题。
我可以使用此查询创建我想要的行:
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
?
使用查询执行此操作是否相对简单,还是需要编写存储过程?如果是后者,指导会有所帮助,因为我不太熟悉它们。
答案 0 :(得分: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 |
+------+------+-------+
答案 1 :(得分:2)
只需在select语句前添加以下行:
INSERT MyTable (Id, Type, Value)