2

我有一个表 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”:语法错误...

查询返回错误。

4

2 回答 2

5

首先,它总是有助于发布尽可能多的信息。在这种特殊情况下,“错误”是没有帮助的,您可能需要 2 秒钟来复制和粘贴给出的实际错误消息,这将在帮助您时为我们提供有价值的线索。

相反,我查看了 SQLite 的 DELETE 语句的文档,在此处找到,并注意到你瞧,DELETE 没有 ORDER BY,除非它是以特定方式编译的。我假设您的版本不是,尽管没有错误消息很难说。

您可以尝试的是:

delete from MRU where DT_ADD = (
    SELECT MIN(DT_ADD) FROM MRU WHERE type = 'FILENAME'
)
于 2010-05-07T19:05:29.317 回答
3

我并不是说你应该这样做,因为它是完全不可移植的,但如果有迫切的需求,这将起作用:

在 SQLite 中,rowid 列始终存在,除非在其他地方定义了整数主键。这可以用于以下内容:

delete from MRU where rowid = (
    select rowid from MRU order by DT_ADD limit 1
)
于 2010-05-07T21:53:02.200 回答