簡體   English   中英

刪除MYSQL表中除TOP / BOTTOM 50行之外的所有行

[英]Delete all rows from a MYSQL table except TOP/BOTTOM 50 rows

http://sqlfiddle.com/#!2/d21f3/1

我有一個表,其中包含一些條目,我希望在此表中僅保留50條消息,按message_id排序,並刪除其余條目。

請幫我查詢一下。

提前致謝。

嘗試這個我已經使用ORDER BY message_id DESC更改它,因為你想要它將刪除所有除了選擇的50個條目,我有別名的查詢,因為你不能使用相同的表來選擇刪除操作

DELETE FROM `chat_history` WHERE id NOT IN ( SELECT t.id FROM 
(SELECT id FROM chat_history ORDER BY message_id DESC LIMIT 50 ) t)

例如。

DELETE a 
  FROM chat_history a 
  LEFT 
  JOIN 
     ( SELECT x.message_id 
         FROM chat_history x 
         JOIN chat_history y 
           ON y.message_id >= x.message_id 
        GROUP 
           BY x.message_id 
       HAVING COUNT(*) <= 50
     ) b 
    ON b.message_id = a.message_id 
 WHERE b.message_id IS NULL;

http://sqlfiddle.com/#!2/361b4/1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM