假设我有一个名为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
下类型A
和B
的值之和。该表的主键是(Id, Type)
,因此不会出现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
中?是否有一个相对简单的方法可以用查询来完成,还是我需要编写存储过程?如果是后者,指导会很有帮助,因为我对它们不太熟悉。
C
被定义为A+B
,并且表中所有条目当前都有A
和B
值,但将来可能会出现仅知道C
且无法确定其分解为A
和B
组件的条目。我意识到这意味着我将不得不实现外部验证逻辑,以确保在已知A
和B
的Id
上插入和更新时,C = A+B
。 - Tyler McHenry