[英]Update all table rows but top N in Mysql
我試圖運行以下查詢
UPDATE blog_post SET `thumbnail_present`=0, `thumbnail_size`=0, `thumbnail_data`=''
WHERE `blog_post` NOT IN (
SELECT `blog_post`
FROM blog_post
ORDER BY `blog_post` DESC
LIMIT 10)
但是 Mysql 不允許在“IN”子查詢中使用“LIMIT”。
我想我可以選擇來計算表行,然后進行受“COUNT - 10”限制的有序更新,但我想知道是否有更好的方法。
提前致謝。
嘗試這個:
UPDATE blog_post SET `thumbnail_present`=0, `thumbnail_size`=0, `thumbnail_data`=''
WHERE `blog_post` NOT IN (
SELECT `blog_post` FROM
(
SELECT `blog_post`, (@rowNum := @rowNum + 1) rn
FROM blog_post, (SELECT @rowNum :=0) b
ORDER BY `blog_post` DESC
) a
WHERE rn <= 10)
認為我理解你是對的:
update blog_post bp
left outer join
(
select
post_id -- what's your PK again ??
from
blog_post
order by
post_id desc limit 10
) latest on latest.post_id = bp.post_id
set
bp.thumbnail_present = 0 -- add more fields
where
latest.post_id is null;
編輯
我已經重命名了這些字段,因為您似乎無法得到提示!
update blog_post bp
left outer join
(
select
blog_post
from
blog_post
order by
blog_post desc limit 10
) latest on latest.blog_post = bp.blog_post
set
bp.thumbnail_present = 0
where
latest.blog_post is null;
子查詢不支持限制,您需要做的是使用更新查詢對外部查詢設置限制。 這樣它只會更新 10 行
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.