2013-03-19 68 views
4

我想從h2數據庫(版本1.0.71)刪除記錄,但我得到一個查詢語法錯誤。我執行的查詢是:H2刪除查詢限制

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; 

它給了我預期的結果。 LIKELIMIT的組合是否有問題?

+0

DELETE語句只刪除record.Instead你可以使用子查詢。 – divyabharathi 2013-03-19 12:54:58

+0

是否可以升級到H2的更新版本?我找不到任何明確的,但似乎你可能不完全支持DELETE命令的版本。 – aaroncatlin 2013-03-19 13:10:40

+0

好吧,試過最新的h2版本(1.3.169),但是無法讀取數據庫格式。 – 2013-03-19 13:32:45

回答

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) 
+0

那麼http://www.h2database.com/html/grammar.html#delete表明h2也應該支持限制。 – 2013-03-19 13:00:46

+0

儘量不要急於回答,然後再編輯它們。花些額外的時間來研究事實並確保你正在構建有用的迴應。 – aaroncatlin 2013-03-19 13:00:46

+0

不是這樣糟糕的建議,但這也不起作用:標量子查詢包含多個行[90053-71] 90053/90053(幫助) – 2013-03-19 13:26:03

0

嘗試

DELETE TOP 1000 FROM TABLE_NAME WHERE QUERY_FIELD LIKE '%somevalue%'; 
+1

當我嘗試這個時,我收到消息:找不到表頂部。這很奇怪,因爲http://www.h2database.com/html/grammar.html#delete表明這兩種方法都應該起作用。 – 2013-03-19 13:00:09

+0

是的,這也是我看過的資源。我會看看我能否找到其他的東西。 – aaroncatlin 2013-03-19 13:02:32

0

升級到最新版本的H2,然後用LIMIT像你這樣。

您使用的H2版本(1.0.71)大約5年,不再支持。要升級,請生成一個SQL腳本(使用SCRIPT語句),然後執行腳本。

+0

雖然這是一個完全有效的建議,但我受制於我工作的生產環境。我對使用哪個版本沒有影響。隨時轉換數據庫不是一種選擇,因爲它們往往很大。 – 2013-03-20 09:29:35

+0

好的,我添加了另一個答案(使用'ROWNUM')。 – 2013-03-20 15:08:34

1

這個解決方案應該與舊版本的H2甚至工作:

DELETE FROM TABLE_NAME 
WHERE QUERY_FIELD LIKE '%somevalue%' 
AND ROWNUM() < 1000; 
+0

是否有一個選項可以通過此刪除語句添加訂單? – 2015-11-23 14:22:31

+0

不,對不起,爲此,您需要「where id_field in(select ...)」解決方案。 – 2015-11-24 13:16:18