web-dev-qa-db-ja.com

DELETEステートメントのMySQL LIMIT

最近出会ったエラーのテストテーブルをまとめました。 MySQLテーブルから単一のレコードを削除しようとすると、LIMITが使用されます。

私が話すエラーは、「SQL構文にエラーがあります。MySQLサーバーのバージョンに対応するマニュアルで、行1の「LIMIT 1」の近くで使用する正しい構文を確認してください

私がまとめたテーブルはtestと呼ばれます; idnameおよびcreated。テーブルに複数のレコードを入力し、1つのレコードを削除しようとしました。以下は、私がこれを試して達成するために使用したステートメントです。

DELETE t FROM test t WHERE t.name = 'foo' LIMIT 1

LIMIT 1を使用しないと、ステートメントは正常に実行されますが、当然、必要がない場合はLIMITを使用しません。

このDELETEを正常に完了するために別のステートメントを使用できることを完全に認識しています。下記参照: DELETE FROM test WHERE name = 'foo' LIMIT 1

しかし、私の質問は、最初のステートメントがLIMITで機能しない理由に集中しています。

だから私の質問は、このエラーを生成する最初のステートメントに関して間違ってやったことですか?

49
Andre

削除クエリでは、DELETE 'コマンド'の後の修飾子のみが許可され、データベースに何をどのように処理するかを指示します。

このページ を参照

21
Ian Wood

単に使用する

DELETE FROM test WHERE 1= 1 LIMIT 10 
31
Manoj Gupta
DELETE t.* FROM test t WHERE t.name = 'foo' LIMIT 1

@Andreあなたが求めていることを理解していれば、欠けているのはFROMの前のt。*だけだと思います。

6
ThelmaJay

つかいます row_count - your_desired_offset

したがって、10行あり、3をオフセットする場合

 10 - 3 = 7

クエリdelete from table where this = that order asc limit 7は最後の3を保持し、order desc最初の3つを保持します3:

$row_count - $offset = $limit

Delete from table where entry = criteria order by ts asc limit $limit

ドキュメント から:

You cannot use ORDER BY or LIMIT in a multiple-table DELETE.
1