2013-01-08 126 views
-2

我需要運行下面的更新腳本查詢更新單行多個值

update table1 set col1 = 'xxxx', 
col2 = (select cc.client_type 
     from table2 t2, table3 t3, table1 t1 
     where t2.col3='YYY' 
     AND t3.col4 != 'aaa' 
     AND t3.col5 = 'Y' 
) 

我收到以下錯誤

Error report: 
SQL Error: ORA-01427: single-row subquery returns more than one row 
01427. 00000 - "single-row subquery returns more than one row" 

我使用Oracle 10g。 對此有何幫助?

+0

什麼必須在col2?你想達到什麼? –

+0

[SQL error ORA 01427]可能的重複(http://stackoverflow.com/questions/12358188/sql-error-ora-01427) – Ben

+0

如何在一列中存儲多個值?你想達到什麼目的? –

回答

1
update table1 t set col1='xxx', 
col2= (select cc.client_type from table2 t2, table3 t3 
where t2.col3='YYY' 
    AND t3.col4 != 'aaa' 
    AND t3.col5 = 'Y' 
    AND t2.random_col=t3.random_col) 

將更新必要記錄(提供的內部查詢只返回一行)。然而,這將是一個恆定值(其中random_col是一些塔,其可以與兩個表2和表3相關聯,random_col2是可以與兩個表3和表1相關聯的一些列)

另一種可能性可以是: -

update table1 t set col1='xxx', 
    col2= (select cc.client_type from table2 t2, table3 t3 
    where t2.col3='YYY' 
     AND t3.col4 != 'aaa' 
     AND t3.col5 = 'Y' 
     AND t2.random_col=t3.random_col 
     AND t3.randome_col2=t.random_col2) 

不同(或相同)上面將更新table1的數值根據表2和表3

+0

請參閱主題名稱。 –

+0

加上AND rownum = 1將只更新第一行... – akhil

+1

這將返回一個隨機行。那有什麼用處? – Ben

0

你所得到的錯誤是因爲,它規定,子查詢返回不止一行。您的查詢正在使用當前相同的數據更新整個table1。我建議以某種方式加入到外部table1引用,以便在外部查詢中的每一行的子查詢中獲得一行。像

update table1 t0 set col1 = 'xxxx', 
col2 = (select cc.client_type 
    from table2 t2, table3 t3, table1 t1 
    where t2.col3='YYY' 
    AND t3.col4 != 'aaa' 
    AND t3.col5 = 'Y' 
    AND t0.colx = t1.colx 
)