使用 sql 子查询更新 mysql 数据库

Update mysql database with sql subquery

我需要为我的 adNote table 编写一个补丁,我在其中存储放置在图像顶部的注释的信息。每当上传修订版并将注释复制到该行时,都会为一行分配 noteParentId

我的主要目标:

对于 noteParentId 相同的每组行,我想将具有最高 revision 的行设置为 1 的值 isLatest场地。正如您在我的示例 "After the Patch" 中看到的那样,我想为 isLatest 设置第 203、204 和 205 行的值为 1,因为它们是这些注释的最新版本。

补丁前

╔══════════╦══════════════╗═════════════╗═════════════╗
║    id    ║ noteParentId ║   revision  ║   isLatest  ║
╠══════════╬══════════════╣═════════════╣═════════════╣
║    200   ║      200     ║       0     ║       0     ║
║    201   ║      200     ║       1     ║       0     ║
║    202   ║      200     ║       2     ║       0     ║
║    203   ║      200     ║       3     ║       0     ║
║    204   ║      204     ║       0     ║       0     ║
║    205   ║      205     ║       0     ║       0     ║
╚══════════╩══════════════╩═════════════╩═════════════╝

补丁后

╔══════════╦══════════════╗═════════════╗═════════════╗
║    ID    ║ noteParentId ║   revision  ║   isLatest  ║
╠══════════╬══════════════╣═════════════╣═════════════╣
║    200   ║      200     ║       0     ║       0     ║
║    201   ║      200     ║       1     ║       0     ║
║    202   ║      200     ║       2     ║       0     ║
║    203   ║      200     ║       3     ║       1     ║
║    204   ║      204     ║       0     ║       1     ║
║    205   ║      205     ║       0     ║       1     ║
╚══════════╩══════════════╩═════════════╩═════════════╝

我原以为我可以 运行 像下面这样的查询,但我收到 mysql 错误

查询尝试:

UPDATE adNote AS a1
SET a1.isLatest = 1
WHERE a1.id IN (
SELECT a2.id
FROM adNote AS a2
WHERE MAX(a2.revision)
GROUP BY a2.noteParentId
)

MySql 错误:

Error : Invalid use of group function

如有任何帮助,我们将不胜感激。

我想这就是您要找的:

update adNote a 
join (select noteParentId, max(revision) maxrevision
      from adNote
      group by noteParentId) a2 on a.noteParentId = a2.noteParentId 
             and a.revision = a2.maxrevision
set a.isLatest = 1;