将两个表中的计算数据合并回其中一个表中

时间:2010-06-11 20:37:25

标签: sql mysql

我有以下情况(作为简化示例)。两个表Measures1Measures2,每个表都存储一个ID,一个以克为单位的权重,以及一个以流体为单位的卷。 (实际上,Measures1还有大量与此无关的其他数据)

Measures1的内容:

+----+----------+--------+
| ID | Weight   | Volume |
+----+----------+--------+
|  1 | 100.0000 |   NULL |
|  2 | 200.0000 |   NULL |
|  3 | 150.0000 |   NULL |
|  4 | 325.0000 |   NULL |
+----+----------+--------+

Measures2的内容:

+----+----------+----------+
| ID | Weight   | Volume   |
+----+----------+----------+
|  1 |  75.0000 |  10.0000 |
|  2 | 400.0000 |  64.0000 |
|  3 | 100.0000 |  22.0000 |
|  4 | 500.0000 | 100.0000 |
+----+----------+----------+

这些表格描述了物质的等效重量和体积。例如。 10液量盎司的物质1重75克。这些ID是相关的:Measures1中的ID 1与Measures2中ID 1的内容相同。

我想要做的是使用NULL中的信息填写Measures1中的Measures2卷,但保持Measures1的权重(最后,我可以删除Measures2表,因为它将是多余的)。为简单起见,假设Measures1中的所有卷都为NULLMeasures2中的所有卷都不是。{/ p>

我可以使用以下查询计算我想要填写的卷:

SELECT Measures1.ID, Measures1.Weight, 
       (Measures2.Volume * (Measures1.Weight / Measures2.Weight)) 
       AS DesiredVolume 
FROM Measures1 JOIN Measures2 ON Measures1.ID = Measures2.ID;

产:

+----+----------+-----------------+
| ID | Weight   | DesiredVolume   |
+----+----------+-----------------+
|  4 | 325.0000 | 65.000000000000 |
|  3 | 150.0000 | 33.000000000000 |
|  2 | 200.0000 | 32.000000000000 |
|  1 | 100.0000 | 13.333333333333 |
+----+----------+-----------------+

但我对如何将这些计算值实际插入Measures1表格感到茫然。

最好,我希望能够使用单个查询来完成,而不是编写迭代Measures1中每个ID的脚本或存储过程。但即便如此,我担心这可能是不可能的,因为MySQL文档说您不能同时在UPDATE查询和SELECT子查询中使用表,我认为任何解决方案需要这样做。

我知道一种解决方法可能是创建一个包含上述查询结果的新表(同时选择Measures1中的所有其他非Volume字段),然后删除两个表并替换{{1使用新创建的表,但我想知道是否有更好的方法来实现它,我错过了。

1 个答案:

答案 0 :(得分:0)

UPDATE Measures1
SET Volume = (Measures2.Volume * (Measures1.Weight / Measures2.Weight)) 
FROM Measures1 JOIN Measures2
ON Measures1.ID = Measures2.ID;