2010-06-11 54 views
0

我有以下情況(作爲簡化示例)。兩個表格Measures1Measures2,其中每個表格存儲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表,因爲這將是多餘的)填寫NULLMeasures1。爲了簡單起見,假設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表,但我想知道是否有更好的方法來做到這一點,我錯過了。

回答

0
UPDATE Measures1 
SET Volume = (Measures2.Volume * (Measures1.Weight/Measures2.Weight)) 
FROM Measures1 JOIN Measures2 
ON Measures1.ID = Measures2.ID; 
相關問題