Sql H2删除查询限制
我试图从h2数据库(版本1.0.71)中删除记录,但出现查询语法错误。我执行的查询是: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
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;