gpt4 book ai didi

mysql - 插入包含从其他行计算的数据的新行

转载 作者:可可西里 更新时间:2023-11-01 07:04:55 24 4
gpt4 key购买 nike

假设我有一个名为 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 是类型 的总和>AB 相同 Id 行的值。这个表的主键是(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 中?

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

最佳答案

您可以将该选择(稍微修改为“您不需要 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 |
+------+------+-------+

关于mysql - 插入包含从其他行计算的数据的新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2843969/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com