4

h2 データベース (バージョン 1.0.71) からレコードを削除しようとしていますが、クエリ構文エラーが発生します。私が実行するクエリは次のとおりです。

DELETE FROM TABLE_NAME WHERE QUERY_FIELD LIKE '%somevalue%' LIMIT 1000;

私が受け取るエラーメッセージは次のとおりです(これは私にはあまり役に立ちません):

Syntax error in SQL statement DELETE FROM TABLE_NAME WHERE QUERY_FIELD LIKE '%somevalue%' LIMIT[*] 1000;

そのLIMIT部分が問題のようですが、これは h2 1.0.71 でサポートされていませんか?

同様のSELECTクエリを実行すると:

SELECT * FROM TABLE_NAME WHERE QUERY_FIELD LIKE '%somevalue%' LIMIT 1000;

それは私に期待される結果を与えます。LIKEとの組み合わせはLIMITおそらく問題がありますか?

4

4 に答える 4

2

SELECT次のように文をWHERE句に入れることができます。

DELETE
FROM TABLE_NAME
WHERE QUERY_FIELD LIKE '%somevalue%'
AND id_field IN (SELECT id_field
                   FROM table_name
                  WHERE QUERY_FIELD LIKE '%somevalue%'
                  LIMIT 1000)
于 2013-03-19T12:55:15.060 に答える
1

このソリューションは、H2 の古いバージョンでも機能するはずです。

DELETE FROM TABLE_NAME 
WHERE QUERY_FIELD LIKE '%somevalue%' 
AND ROWNUM() < 1000;
于 2013-03-20T15:07:37.680 に答える
0

H2 の最新バージョンにアップグレードしてから、以前とLIMIT同じように使用してください。

使用している H2 バージョン (1.0.71) は約 5 年前のものであり、サポートされていません。アップグレードするには、(SCRIPTステートメントを使用して) SQL スクリプトを生成し、スクリプトを実行します。

于 2013-03-19T15:27:27.867 に答える
0

試す

DELETE TOP 1000 FROM TABLE_NAME WHERE QUERY_FIELD LIKE '%somevalue%';
于 2013-03-19T12:56:29.883 に答える