我正在尝试从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
的组合可能有问题吗?
答案 0 :(得分: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)
答案 1 :(得分:1)
即使使用旧版本的H2,此解决方案也应该有效:
DELETE FROM TABLE_NAME
WHERE QUERY_FIELD LIKE '%somevalue%'
AND ROWNUM() < 1000;
答案 2 :(得分:0)
尝试
DELETE TOP 1000 FROM TABLE_NAME WHERE QUERY_FIELD LIKE '%somevalue%';
答案 3 :(得分:0)
升级到更新版本的H2,然后像您一样使用LIMIT
。
您正在使用的H2版本(1.0.71)大约已有5年历史,不再受支持。要升级,请生成SQL脚本(使用SCRIPT
语句),然后执行脚本。