从SQL中删除最新X记录的有效方法是什么?

时间:2009-10-05 14:48:32

标签: sql mysql

我有一个简单的表,其中一个字段是日期列。我可以通过

选择最新的X记录
Select * from MyTable order by last_update desc limit X

但是如何有效删除这些列呢?亚选是最快的吗?

4 个答案:

答案 0 :(得分:2)

您可以使用与原始查询相同的条件以完全相同的方式执行“从哪里删除”。 e.g:

DELETE FROM Person WHERE Person.name = "jeff"

DELETE FROM Person WHERE Person.joinTime > 12001234567 LIMIT 100

如果您想删除某个范围(例如最近10个),您可以尝试:

DELETE * FROM Person WHERE id >= ( LAST_INSERT_ID() - 10 ); 

答案 1 :(得分:2)

如果我没记错,IN子句接受子选择。可能是错的。

DELETE FROM Person 
WHERE 
  Person.ID IN ( 
     SELECT t.ID 
     FROM 
        Person t 
     ORDER BY 
        t.joinTime DESC
     LIMIT X
   )

答案 2 :(得分:1)

也许是这样的:

DELETE FROM MyTable WHERE rowid IN
(SELECT rowid FROM MyTable ORDER BY last_update DESC LIMIT X);

答案 3 :(得分:1)

DELETE  d.*
FROM    mytable d
LEFT JOIN
        (
        SELECT  id
        FROM    mytable
        ORDER BY
                last_update DESC
        LIMIT   10
        ) q
ON      d.id = q.id
WHERE   q.id IS NULL

如果您使用MySQL,这是首选解决方案,因为IN (SELECT ... LIMIT)MySQL中不起作用。

有关详细信息,请参阅我的博客中的此条目: