2011-07-15 128 views
-2

我有這個疑問會拋出錯誤-SQL提供了錯誤SQL查詢來更新列

ORA-01427單行子查詢返回多行

在甲骨文8

UPDATE STG1_HFHS_ENR_EMP_ROSTER_2005 A 
SET 
A.BUSINESS_UNIT = 
(SELECT t.BUSINESS_UNIT 
FROM STG1_HFHS_ENR_EMP_ROS_2005_TMP t, STG1_HFHS_ENR_EMP_ROSTER_2005 s 
WHERE t.ID = s.ID) 

請幫我解決上述錯誤。我要更新一列"A.BUSINESS_UNIT =

+1

格式是你的朋友! –

+1

您的子選擇返回多行。你需要在'WHERE'或者'LIMIT'中用一個額外的子句來限制它。你想在次選中得到什麼? – Jacob

+0

我必須從內部查詢中選擇.BUSINESS_UNIT並更新外部查詢 – rohit

回答

2

試試這個:

UPDATE STG1_HFHS_ENR_EMP_ROSTER_2005 A 
SET 
A.BUSINESS_UNIT = 
(SELECT t.BUSINESS_UNIT 
FROM STG1_HFHS_ENR_EMP_ROS_2005_TMP t 
WHERE t.ID = A.ID AND ROWNUM < 2) 
+0

Thanks.But現在我們在SELECT TOP 1 t.BUSINESS_UNIT子查詢中得到另一個錯誤,它表示ORA000923:從關鍵詞中找不到預期的地方。 **停止在TOP 1.我正在使用Oracle 8 – rohit

+0

@rohit不明白錯誤描述。 – VMAtm

+0

@VMAtm:那個「ORDER BY t.ID」的目的是什麼? –

0
UPDATE stg1_hfhs_enr_emp_roster_2005 a 
SET 
a.business_unit = 
(SELECT business_unit 
FROM (SELECT business_unit 
     FROM stg1_hfhs_enr_emp_ros_2005_tmp 
     ORDER BY ... -- some clause that puts the most relevant business_unit as first 
    ) 
WHERE id = a.id 
    AND ROWNUM < 2); 

不幸的是我沒有訪問Oracle 8對此進行測試。 需要兩層內嵌視圖來訂購和限制行數。另外,你不能直接在最深的內聯視圖(一些愚蠢的Oracle限制)內引用表「a」,所以它在中間視圖中是需要的。

+0

rownum <2做什麼? – rohit

+0

@rohit保證在多行的情況下只返回第一行,它可以防止「ORA-01427單行子跳ery返回多行「 – jva