Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql H2删除查询限制_Sql_H2 - Fatal编程技术网

Sql H2删除查询限制

Sql H2删除查询限制,sql,h2,Sql,H2,我试图从h2数据库(版本1.0.71)中删除记录,但出现查询语法错误。我执行的查询是: DELETE FROM TABLE_NAME WHERE QUERY_FIELD LIKE '%somevalue%' LIMIT 1000; 我收到的错误消息是(这对我没有多大帮助): 限制部分似乎是问题所在,h2 1.0.71不支持这一点吗 当我执行类似的选择查询时: SELECT * FROM TABLE_NAME WHERE QUERY_FIELD LIKE '%somevalue%' LIMIT

我试图从h2数据库(版本1.0.71)中删除记录,但出现查询语法错误。我执行的查询是:

DELETE FROM TABLE_NAME WHERE QUERY_FIELD LIKE '%somevalue%' LIMIT 1000;
我收到的错误消息是(这对我没有多大帮助):

限制
部分似乎是问题所在,h2 1.0.71不支持这一点吗

当我执行类似的
选择
查询时:

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

它给了我预期的结果。
LIKE
LIMIT
的组合可能有问题吗?

您可以在
WHERE
子句中放入
SELECT
语句,如下所示:

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)
试一试


升级到H2的最新版本,然后像以前一样使用
LIMIT


您正在使用的H2版本(1.0.71)已有5年历史,不再受支持。要升级,请生成一个SQL脚本(使用
脚本
语句),然后执行该脚本。

此解决方案即使适用于较旧版本的H2:

DELETE FROM TABLE_NAME 
WHERE QUERY_FIELD LIKE '%somevalue%' 
AND ROWNUM() < 1000;
从表中删除\u名称
其中查询\u字段,如“%somevalue%”
和ROWNUM()<1000;

Delete语句将只删除一条记录。您可以使用子查询。是否可以升级到H2的最新版本?我找不到任何确定的版本,但您的版本可能不完全支持DELETE命令。嗯,尝试了最新的h2版本(1.3.169),但该版本无法读取数据库格式。您需要升级到更新版本的h2。您正在使用的版本(1.0.71)不再受支持。要升级,请生成一个SQL脚本(使用
script
语句),然后执行该脚本。尝试此操作时,会收到消息:Table TOP not found。这很奇怪,因为这两种方法都应该有效。是的,这也是我看过的同一个资源。我会看看是否还能找到其他东西。Well建议h2也应该支持该限制。尽量不要急于回答,然后再编辑它们。花额外的时间研究事实并确保您正在构建一个有用的响应。这不是一个很好的建议,但也不起作用:标量子查询包含多行[90053-71]90053/90053(帮助)。虽然这是一个完全有效的建议,但我受我工作的生产环境的约束。我对使用哪个版本没有影响。始终转换数据库不是一个选项,因为它们往往很大。好的,我添加了另一个答案(使用
ROWNUM
)。是否有一个选项可以将order by添加到此delete语句中?不,很抱歉,您需要“where id_字段in(select…)”解决方案。
DELETE TOP 1000 FROM TABLE_NAME WHERE QUERY_FIELD LIKE '%somevalue%';
DELETE FROM TABLE_NAME 
WHERE QUERY_FIELD LIKE '%somevalue%' 
AND ROWNUM() < 1000;