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