如何在限制后从表中删除记录

时间:2010-10-29 14:51:49

标签: mysql subquery sql-delete

我有一张这样的表:

CREATE TABLE  vhist (  id int(10)
 unsigned NOT NULL auto_increment, 
 userId varchar(45) NOT NULL, 
 mktCode int(10) unsigned NOT NULL,  
 insertDate datetime NOT NULL,
 default NULL, PRIMARY KEY  (`id`) 
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

用户可以拥有多条记录。 我需要一个SQL语句,它将保留最近的50条记录并删除该限制之后的任何内容。

我需要在单个sql语句中使用它。

我试过了但是失败了

 delete from vhist v where v.id not in
 (select v.id from vhist v where
 v.userId=12 order by insertDate desc
 limit 50)

但是在MYSQL上失败了,说IN不能用于限制。

有任何帮助吗?

1 个答案:

答案 0 :(得分:0)

你需要一个子查询,如下所示:

DELETE FROM vhist WHERE id NOT IN (
    SELECT id FROM (
        SELECT id FROM vhist WHERE userId = 12 ORDER BY insertDate DESC LIMIT 50
    ) as foo
);