2

3 つの列を持つテーブル MRU があります。

(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 に答える