我嘗試使用以下查詢,但它無效。用於刪除IBM Informix中表的前100行的數據庫查詢
delete from tableName where id IN (select FIRST 100 id from tableName)
在此先感謝。
我嘗試使用以下查詢,但它無效。用於刪除IBM Informix中表的前100行的數據庫查詢
delete from tableName where id IN (select FIRST 100 id from tableName)
在此先感謝。
子查詢不返回列。你需要使用:
DELETE FROM tableName
WHERE id IN (SELECT FIRST 100 id FROM tableName)
上面的查詢生成錯誤-944(不能在此背景下使用「第一」,「限制」或「跳過」 - 刺激性限制),所以我們必須解決服務器:
$ sqlcmd -d stores -e 'create table tablename (id integer not null primary key)'
$ random -n 350 | sort -u | sqlreload -d stores -t tablename
348 rows committed
$ sqlcmd -e 'select count(*) from tablename'
348
$ sqlcmd -d stores \
> -e 'select first 100 id from tablename into temp delete_me' \
> -e 'delete from tablename where id in (select * from delete_me)'
$ sqlcmd -e 'select count(*) from tablename'
248
$
在這個例子中,我並不需要刪除臨時表,delete_me
,但在一個程序,它很可能是一個好主意,這樣做明確你一次'完成了。選擇一個不太可猜測的名稱可能會更好 - 基於UUID或GUID的名稱或類似的名稱可能會起作用。
請注意'FIRST 100'是一個不確定的數字列表;它幾乎可以擺在桌子上的任何100行。
這sqlcmd
是這個名字的原始程序(或者,至少比微軟的同名最近更新的原始程序,無論如何),我寫了超過25年的時間,並且可以從IIUG — International Informix Users Group下載它的來源。
您的查詢看起來沒問題。如果select FIRST 100 id from tableName
返回一些東西,那麼這樣的DELETE
應該刪除這些行。檢查這樣的SELECT
返回。
也許你在交易中使用它,然後你不提交這些更改。
如果您從智能SQL編輯器中調用DELETE
,它應該會顯示類似的行100行已更改。這些信息(受影響的行數)由Java JDBC或其他環境中的類似函數返回executeUpdate()
。
其實累了你上面提到的查詢。它沒有工作。對於在上述問題中提到的錯誤查詢,我抱歉。 – v0001
「沒有工作」是如此令人生厭的描述;目前尚不清楚發生了什麼事。答案是,你可能得到錯誤-944:在這種情況下,不能使用「第一」,「限制」或「跳過」。這是資料豐富(也令人惱火,但也提供信息)。當然,在這個查詢中總會有一個「FIRST 100意味着什麼」的問題。您使用的是哪個版本的Informix?如果它是12.10,則可以使用OLAP功能,並且應該能夠使用該功能來完成這項工作 - 但我尚未將我的大腦包括在符號中。 –