2013-06-19 22 views
1

我有2個MySQL表。如何根據JOIN表中的SELECT MAX()更新MySQL表

TableA 
ID Total 
01 0 
02 0 
03 0 
... 
99 0 

TableB 
ID Name Points Year 
01 Joe 4  2013 
01 Bill 2  2013 
02 Sam 10  2013 
02 Barb 1  2013 
02 Joan 7  2013 
... 
15 Fred 0  2013 
15 Jan 3  2013 
... 

我想從Table BTotal列基於IDMAX(Points)值存儲在Table A

我有一個MySQL查詢得到我的MAX(Points)。在循環遍歷從我的MAX()查詢得到的結果集的同時,我沒有編寫單獨的UPDATE查詢,而是想知道是否可以在一個MySQL查詢中使用Join和SET SELECT來完成這一切。

這可能將2個查詢合併爲1嗎?

這裏是我的MAX()查詢:

$result = mysql_query(' 
    SELECT id, MAX(Points) 
    FROM TableB 
    WHERE year = "' . date('Y') . '" 
    GROUP BY id 
') or die(mysql_error()); 
while ($row = mysql_fetch_row($result)) { 
    mysql_query(' 
     UPDATE TableA 
     SET Total = "' . $row[1] . '" 
     WHERE id = "' . $row[0] . '" 
    ') or die(mysql_error()); 
} 
mysql_free_result($result); 

感謝

回答

3

嘗試使用這個作爲你的SQL語句:

UPDATE TableA, TableB 
SET TableA.Total = Max(TableB.Points) 
WHERE TableA.ID=TableB.ID 
AND TableB.year=<whatever> 

取2

OK,嘗試這一個,而不是

UPDATE tablea 
JOIN (
    SELECT id, max(points) AS total 
    FROM tableb 
    WHERE year=<whatever> 
    GROUP BY id 
) AS sub ON tablea.id=sub.id 
SET tablea.total=sub.total 
+0

我試了一下@nurdglaw並得到了'無效的使用組功能' –

+1

好的。等一下,我會做一個測試並回復你。 – nurdglaw

+0

謝謝@nurdglaw。我喜歡這可能工作的可能性。我很感謝你的編碼幫助。 –