是的,这是可能的。将子查询合并到UPDATE语句中有几种方法。
的一种方法是使用多表更新,和使用内联视图返回计数:
UPDATE posts p
JOIN (SELECT COUNT(c.id) AS cnt
FROM posts c
WHERE c.post_status = 'saved'
AND c.user_id = 1
) v
ON v.cnt <= 5
SET p.post_title = 'my title'
WHERE p.id = 15
LIMIT 1
内联视图查询(别名为v
)首先运行。这将返回一行(因为COUNT聚合)。然后我们使用连接操作来匹配posts表中的行(别名为p
)。
对于连接谓词,我们引用了内联视图中返回的“count”。如果这大于五,那么它将不匹配posts表中的任何行,因此不会更新行。
有几种方法,以获得相同的结果:
UPDATE (SELECT COUNT(c.id) AS cnt
FROM posts c
WHERE c.post_status = 'saved'
AND c.user_id = 1
HAVING COUNT(c.id) <= 5
) v
JOIN posts p
ON p.id = 15
SET p.post_title = 'my title'
LIMIT 1
或者
UPDATE posts p
SET p.post_title = 'my title'
WHERE p.id = 15
AND (SELECT COUNT(c.id) AS cnt
FROM posts c
WHERE c.post_status = 'saved'
AND c.user_id = 1
) <= 5
LIMIT 1
@ spencer7593更新需要做的只有一列其中有我已经更新的15的ID问题 – Mark 2014-10-07 01:23:35