2015-07-02 115 views
1

這個問題似乎已經被問了很多,但我找不到任何處理更新和處理其他的東西沒有幫助。我覺得我失去了一些顯而易見的東西,但我無法把它放在手指上。Oracle SQL |單行子查詢更新返回多行?

我有以下查詢與ID來更新我的表從另一個表,以使匹配到電子表格:

update TABLE3 set ITM_CD2 = 
(select pi.ITM_CD2 
    from schema1.PI_TABLE pi, 
     TABLE3 tb3 
    where pi.OTHER_ITM_CD = tb3.OTHER_ITM_CD) 

我不能真正與更新經歷,因爲我不斷收到「需要一個單-row子查詢「問題。

編輯:我應該提到pi表是從一個單獨的架構。

編輯2:欲瞭解更多詳情;這是我想要獲得一個例子:

表3目前有這個數據,例如:

NAME ----- PRODUCT ----- ITM_CD1 ----- ITM_CD2 
X   Y    11   NULL 
A   B    12   NULL 
C   Y    11   NULL 

我想從這個項目表中附上數據,所以我可以得到第二itm_cd這將允許我將它與具有ITM_CD2但不是ITM_CD1的表進行比較。表3中的NULL將被替換爲匹配的ITM_CD2。

表我試圖採取ITM_CD2從應該是這樣的:

PRODUCT ----- ITM_CD1 ----- ITM_CD2 
A    10   90 
Y    11   98 
B    12   87 
+1

運行子選擇獨立,是否只返回1行? – jarlh

+0

它確實返回多行。我的問題是搞清楚如何讓它只返回一行。迄今沒有任何答案發揮作用。 –

+0

如果您添加一些示例數據(兩個表格),並向我們顯示預期結果,則將更容易爲您提供幫助! – jarlh

回答

3

也許你想在主表3中的子查詢:

update TABLE3 set ITM_CD2 = 
(select pi.ITM_CD2 
    from PI_TABLE pi 
    where pi.OTHER_ITM_CD = TABLE3.OTHER_ITM_CD) 
0

嘗試此查詢

UPDATE (SELECT t1.Item_CD2,pi.ITM_CD2 
      FROM table3 t1 
      join pi_table pi on pi.OTHER_ITM_CD = t1.OTHER_ITM_CD 
     ) 
SET t1.Item_CD2=pi.ITM_CD2 
+0

這對於Oracle來說是無效的語法。 – Allan

+0

我認爲這是有效的,只要'OTHER_ITM_CD'是主鍵。 –

1

對於此ki,我喜歡使用merge而不是update情景。它使得您正在閱讀的表格與正在書寫的表格之間的連接更加清晰:

MERGE INTO table3 t3 
USING  pi_table pi 
ON   (pi.other_itm_cd = t3.other_itm_cd) 
WHEN MATCHED THEN 
    UPDATE SET t3.itm_cd2 = pi.itm_cd2 
相關問題