我有一个简单的表,其中一个字段是日期列。我可以通过
选择最新的X记录Select * from MyTable order by last_update desc limit X
但是如何有效删除这些列呢?亚选是最快的吗?
答案 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
中不起作用。
有关详细信息,请参阅我的博客中的此条目: