我需要为我的adNote
表编写一个补丁,在其中我存储放置在图像顶部的注释的信息。每当上传修订版并将注释复制到其上时,就会为行分配noteParentId
。
我的主要目标:
对于noteParentId
相同的每组行,我想将revision
的最高行设置为1
字段的isLatest
值。正如您在我的示例“After the Patch”中所看到的,我想为1
设置值为isLatest
的行203,204和205,因为它们是这些注释的最新版本。
补丁之前
╔══════════╦══════════════╗═════════════╗═════════════╗
║ 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
非常感谢任何帮助。
答案 0 :(得分:1)
我认为这是你正在寻找的东西:
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;