最近出会ったエラーのテストテーブルをまとめました。 MySQLテーブルから単一のレコードを削除しようとすると、LIMITが使用されます。
私が話すエラーは、「SQL構文にエラーがあります。MySQLサーバーのバージョンに対応するマニュアルで、行1の「LIMIT 1」の近くで使用する正しい構文を確認してください
私がまとめたテーブルはtestと呼ばれます; id、nameおよび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で機能しない理由に集中しています。
だから私の質問は、このエラーを生成する最初のステートメントに関して間違ってやったことですか?
削除クエリでは、DELETE 'コマンド'の後の修飾子のみが許可され、データベースに何をどのように処理するかを指示します。
このページ を参照
単に使用する
DELETE FROM test WHERE 1= 1 LIMIT 10
DELETE t.* FROM test t WHERE t.name = 'foo' LIMIT 1
@Andreあなたが求めていることを理解していれば、欠けているのはFROM
の前のt。*だけだと思います。
つかいます 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.