如何基于联接表中的SELECT MAX()更新MySQL表

如何基于联接表中的SELECT MAX()更新MySQL表,mysql,select,join,set,Mysql,Select,Join,Set,我有两个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 ... 我想将表B中基于ID的MAXPoints值存

我有两个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
...
我想将表B中基于ID的MAXPoints值存储在表A的Total列中

我有一个MySQL查询,可以获取最大点。我不想在循环使用MAX查询的结果集时编写一个单独的更新查询,而是想知道是否可以使用某种连接和选择集在一个MySQL查询中完成这一切

这是否可以将2个查询合并为1个查询

以下是我的最大查询:

$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);

谢谢

尝试将此用作SQL语句:

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

好的,试试这个

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

好啊等一下,我会安排一个测试,然后再打给你。谢谢@nurdglaw。我喜欢这种可能性。非常感谢您的编码帮助。@H.Ferrence-抱歉,这比我预期的要难。似乎我不能将GROUPBY与多表更新一起使用,而且我还没有设法使子查询工作。仍在尝试…我在想我需要加入这两个表,并以某种方式做一个集合total=SELECT…某种程度上我在上面的第二次尝试中尝试了一下-我已经测试了这个-