我有一张表MRU,有3列。
(VALUE varchar(255); TYPE varchar(20); DT_ADD datetime)
这是一个简单存储条目并记录其记录日期时间的表格。我想要做的是:每当我添加一个超过一定数量的新条目时,删除最旧的条目。
这是我的问题:
delete from MRU
where type = 'FILENAME'
ORDER BY DT_ADD limit 1;
错误消息是: SQL错误:接近“ORDER”:语法错误...
查询返回错误。
答案 0 :(得分:5)
首先,它总是有助于发布尽可能多的信息。在这个特定的例子中,“错误”是无益的,它可能需要2秒才能复制并粘贴给出的实际错误消息,这将为我们提供有用的线索,帮助您。
相反,我去了SQLite的DELETE语句的文档,找到了here,并注意到并且,DELETE没有ORDER BY,除非它是以特定的方式编译的。我认为你的版本不是,虽然没有错误信息很难说。
您可以尝试的是:
delete from MRU where DT_ADD = (
SELECT MIN(DT_ADD) FROM MRU WHERE type = 'FILENAME'
)
答案 1 :(得分:3)
我不是说你应该这样做,因为它完全不可移植,但如果有迫切需要,这将有效:
在SQLite中,除非在别处定义了整数主键,否则rowid列始终存在。这可以用于:
delete from MRU where rowid = (
select rowid from MRU order by DT_ADD limit 1
)