2011-09-19 9 views
0

HTML5データベースを試していて、DELETEがLIMITで動作していないことがわかりました。HTML5データベース:DELETE LIMITのSQLエラー

Chromeで試す:

> select * from my_table limit 1 
item name 
-------------- 
1  Hi 

> delete from my_table limit 1 
near "limit": syntax error 

この削除を持つ任意の間違っていますか?

ありがとうございました。

+0

を試すだけで、次は、いくつかの条件に一致するレコードの1つを削除することが分かっ: は '(中ROWIDがROWIDを選択MY_TABLEから削除from my_table where item = 1 limit 1) ' – Deqing

+0

Btw、SQLiteがコンパイル時オプションSQLITE_ENABLE_UPDATE_DELETE_LIMITでコンパイルされた場合、DELETEはLIMITをサポートします。 – Deqing

答えて

2

私はdeletelimitをサポートしているとは思っていません(少なくとも、私が知っているSQL方言はありません)。代わりに、あなたは

delete from my_table; 

または削除したい行について具体的に経由して、テーブルからすべてを削除したいと思うのいずれか:

delete from my_table where item=1; 

編集に追加する:でを(order byステートメントまたは一部のRDBMSに存在するrow_number()関数を使用して)指示しない限り、データベースは行の順序を気にする傾向がありません。したがって、一般に、select * from my_table limit 1;を何度か呼び出すと、毎回同じ行が得られるとは限りません。言い換えれば、実際にテーブルから特定の行数だけを必要とし、どの行を取得しても気にしない限り、limitステートメントは、クエリによってフェッチされた行に何らかの順序を課す必要はほとんどありません。 DELETE SELECTではなく上のLIMITを可能にSQL方言を

+2

MySQLはDELETEでLIMIT句を使用できますが、SQL ServerではTOP(これは同じ)が使用できますが、どちらも非標準のSQL拡張です。 –

+0

@Jeff Mc:Gotcha。私のSQLの経験はPostgreSQLに完全に組み込まれており、 'limit'は' delete'では許されません(少なくとも私が走っているバージョンではありません)。しかし、(多少の)ランダムな行を削除する可能性を残してしまうので、それを行うのは危険です。 –

+0

LIMITは、 "ランダムな"行の選択を削除します。私が使用する唯一の時間は、非常に多くの行を削除して、変更された行の数が0になるまでそれを再実行し続けることです(述語に一致する全体のセットが削除されます)。非常に大きな削除があります。 –

2

DELETE FROM my_table WHERE item IN (SELECT item FROM my_table LIMIT 1)

+0

ありがとうございます。実際には、「一致するレコードのうちの1つを削除する」ことは、テーブルに重複レコードが多数ある可能性があります。あなたの方法を試しても、一致するすべてのレコードが削除されます。 – Deqing

+0

私は 'item'がユニークなキーであるという誤った仮定をしていました。 –

関連する問題