代码之家  ›  专栏  ›  技术社区  ›  rvpals

简单的delete语句不起作用

  •  2
  • rvpals  · 技术社区  · 14 年前

    我有一个表MRU,有三列。

    (VALUE varchar(255); TYPE varchar(20); DT_ADD datetime)
    

    这是一个表,简单地存储一个条目并记录它被记录的日期和时间。我想做的是:每当我添加一个超过一定数量的新条目时,删除最旧的条目。

    我的问题是:

    delete from MRU 
    where type = 'FILENAME' 
    ORDER BY DT_ADD limit 1;
    

    错误消息是: SQL错误:接近“顺序”:语法错误…

    查询返回错误。

    2 回复  |  直到 9 年前
        1
  •  3
  •   pkh    14 年前

    我不是说你应该这么做,因为它是完全不可移植的,但如果有迫切的需要,这将工作:

    在sqlite中,除非在别处定义了整数主键,否则rowid列始终存在。这可以用于以下情况:

    delete from MRU where rowid = (
        select rowid from MRU order by DT_ADD limit 1
    )
    
        2
  •  5
  •   Lasse V. Karlsen    14 年前

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

    相反,我找到了sqlite的delete语句的文档 here 注意,看哪,删除没有顺序,除非它是以特定的方式编译的。我认为你的版本不是,尽管没有错误信息很难判断。

    你可以尝试的是:

    delete from MRU where DT_ADD = (
        SELECT MIN(DT_ADD) FROM MRU WHERE type = 'FILENAME'
    )