是的,這是可能的。將子查詢合併到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