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

时间:2015-12-08 03:08:56

标签: mysql sql subquery

我需要为我的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

非常感谢任何帮助。

1 个答案:

答案 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;