我有以下情況(作爲簡化示例)。兩個表格Measures1
和Measures2
,其中每個表格存儲ID,以克爲單位的權重,以及可選地存儲流體中的體積。 (在現實中,Measures1
具有其他數據的一個很好的協議,在這裏無關緊要)將兩個表中的計算數據合併回其中一個
內容的Measures1
:中Measures2
+----+----------+--------+
| ID | Weight | Volume |
+----+----------+--------+
| 1 | 100.0000 | NULL |
| 2 | 200.0000 | NULL |
| 3 | 150.0000 | NULL |
| 4 | 325.0000 | NULL |
+----+----------+--------+
內容:
+----+----------+----------+
| 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是相同的物質。
我想要做的是使用Measures2
的信息,但保持距離Measures1
權(然後,最終,我可以刪除Measures2
表,因爲這將是多餘的)填寫NULL
卷Measures1
。爲了簡單起見,假設Measures1
中的所有卷都是NULL
,並且Measures2
中的所有卷都不是。
我能計算我想用下面的查詢填寫卷:
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
表。
最好,我希望能夠用一個查詢來完成,而不是編寫一個腳本或存儲過程來遍歷每個ID在Measures1
。但即使如此,我擔心這可能是不可能的,因爲MySQL文檔說,你不能同時在UPDATE
查詢和SELECT
子查詢中使用表,我認爲任何解決方案都需要這樣做。
我知道,一個解決方法可能是創建一個新的表上面的查詢結果(也選擇在Measures1
所有其他非音量字段的),然後刪除兩個表,並與新創建的替代Measures1
表,但我想知道是否有更好的方法來做到這一點,我錯過了。