我有以下情况(作为简化示例)。两个表Measures1
和Measures2
,每个表都存储一个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
中的所有卷都为NULL
而Measures2
中的所有卷都不是。{/ 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使用新创建的表,但我想知道是否有更好的方法来实现它,我错过了。
答案 0 :(得分:0)
UPDATE Measures1
SET Volume = (Measures2.Volume * (Measures1.Weight / Measures2.Weight))
FROM Measures1 JOIN Measures2
ON Measures1.ID = Measures2.ID;