2013-07-31 44 views
0

我有以下更新查詢來設置一些值並控制數據流。但是當我執行波紋管查詢時,出現了來自condtion(子查詢)的錯誤「太多值」。更新多行查詢問題

UPDATE MTB  ----- TABLE NAME 
SET MTB_EXTR_FLAG='N', 
MTB_ALOC_PROCESS='DC1' 
WHERE MTB_I IN  --- PRIMARY KEY 
(
SELECT * FROM 
(
SELECT MTB_I ,ROW_NUMBER() OVER (ORDER BY ROWID) AS RN 
FROM MTB 
) 
WHERE RN BETWEEN 100 AND 500 
) 

在這裏,我的意圖是選擇每個工作的處理不同的設置數據。 我想在每次使用不同數據集運行作業之前設置MTB_EXTR_FLAG ='N',MTB_ALOC_PROCESS ='DC1'。

有人可以幫助我解決錯誤問題或提出不同的查詢。

謝謝。

+1

我無法通過rowid進行排序 - 當您在表上執行不同的操作時,rowid可能會更改。如果不通過rowid,你如何排列你的數據?我猜你想在創建該行時排名。你在表格中有一個update_date列嗎? – haki

回答

1

我覺得這是不匹配的列數的問題(2 - MTB_IRN - 而不是1 - MTB_I):

UPDATE MTB  
SET MTB_EXTR_FLAG='N', 
MTB_ALOC_PROCESS='DC1' 
WHERE MTB_I IN  --- PRIMARY KEY 
(
SELECT MTB_I FROM -- Else RN will be taken !! 
(
SELECT MTB_I ,ROW_NUMBER() OVER (ORDER BY ROWID) AS RN 
FROM MTB 
) 
WHERE RN BETWEEN 100 AND 500 
) 

你不能用一個子查詢返回多個字段做where x in (...)超出預期。

+0

謝謝Emmanuel。現在,在「Select MTB_I」替換「select *」後, – user2636867