1

我有 2 个 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
...

我想将基于的MAX(Points)值存储在中的列中Table BIDTotalTable A

我有一个 MySQL 查询,可以让我获得MAX(Points). 我想知道是否可以在一个 MySQL 查询中使用 Join 和某种类型的 a 来完成这一切,而不是UPDATE在循环遍历查询的结果集时编写单独的查询。MAX()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);

谢谢

4

1 回答 1

3

尝试使用它作为您的 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
于 2013-06-19T14:06:50.510 回答