2011-12-22 13 views
0

私はSQLiteをサポートするデータベースクエリ抽象化レイヤで作業しています。DELETE ... LIMIT句(SQL)の回避策

残念ながら、最新のバージョンで特別なフラグを付けてコンパイルした場合を除き、SQLiteはDELETE(およびUPDATEなど)クエリのLIMIT句をサポートしていません。

したがって、そのクエリタイプをサポートできるように実装できる回避策がありますか?

+0

[SQLiteでDELETEのLIMITを有効にする方法は?](http://stackoverflow.com/questions/1824490/how-do-you-enable-limit-for-delete-in-sqlite) – Ralf

答えて

1

LIMITはSQLiteのビルドではサポートされていませんが、サブクエリでLIMIT selectを使用して更新または削除される行を識別するメソッドを実装することで、動作を再現できます。 LIMITが有効なSQLiteビルドを使用するとパフォーマンスが低下することに注意してください。しかし、この機能が必要な場合は実行可能なオプションのように見えます。

大量のデータを処理している場合、またはこれを試行した結果、パフォーマンスが低下することが判明した場合は、LIMIT selectを使用して一時表を作成し、その表に対してあなたの削除または更新。

+0

私はこの答えが好きです。 :) もう1つのこと:クエリーオブジェクトで取得したデータに基づいて私の主キー列を知る方法はありません。 – Franz

+0

@フランツ - それは独特の状況のようです。そのような一般的なデータを受け取っている場合は、あなたがターゲットとしているスキーマのPKが何であるかを知ることができません。私が考えることができる唯一のことは、タプルの属性の完全なリストが与えられている場合は、WHEREを試行して、あなたが持つすべての属性を指定できるということです。もちろん、これはテーブルが一意のタプルを持つことが保証されている場合にのみ機能します。 – Carth

+0

私はDELETE ... LIMIT節をサポートしていないと思います。ガー、SQLiteは私を怒らせる! – Franz