2012-04-02 43 views
3

我試圖根據另一個表(學生表)中的另一列和另一個表(學校表)的列 更新列UpdateError:接收錯誤ORA - 01427單行子查詢返回多個行

代碼是:

update student_table 
set student_code = 
(select l.student_code 
from school_table l, student_table n 
where l.school = n.schoolname) 

我收到以下錯誤

ORA - 01427單行子查詢返回不止一行

任何幫助,將不勝感激。

回答

2

這將是有幫助的,你要完成什麼簡單的英語解釋。話雖如此,在我看來,你可以用以下SQL [假設school_table和student_table之間的一對多關係]將內部選擇作爲具有外部更新語句的相關子查詢來完成你想要做的事情:

update student_table 
set student_code = (select l.student_code 
        from school_table 
        where school_table.school = student_table.schoolname) 
; 

希望這會有所幫助。

問候, 羅傑

+0

感謝羅傑我不得不改變它的一些,但它的工作! – user1307149 2012-04-22 01:49:45

4

如果你運行你的子查詢,你會發現它返回多行。您正在嘗試更新列,使其等於子查詢的結果,因此它只需要一個值。你應該限制你的子查詢只返回一行,例如使用max()或min(),或者你可能想加入到外部student_table?嘗試:

update student_table n 
set student_code = 
(select l.student_code 
from school_table l 
where l.school = n.schoolname); 
+0

好吧,我明白你在說什麼了。由於我的內部查詢返回多個值,它會給我這個錯誤。內部選擇語句給了我想要更新的正確值。我嘗試了一個合併聲明,但它給了我一個不同的錯誤。再次感謝。 – user1307149 2012-04-02 04:03:52

0

你的內部查詢..

select l.student_code 
from school_table l, student_table n 
where l.school = n.schoolname 

可能返回多個值。運行內部查詢並檢查值的編號。

+0

是的,內部選擇給了我多個值。我試圖一次更新它們。我正在運行的select給我正確的值,我想更新,但更新語句是我遇到麻煩的地方。再次感謝! – user1307149 2012-04-02 04:05:50

+0

@ user1307149:我知道你試圖一次更新所有的行,但是內部查詢返回多於一行,想象一下'set student_code = '你如何給student_code指定多個值,顯然它會給你一個錯誤。像更新中的哪個student_code將用內部查詢student_code更新。嘗試找到兩者之間的關係。 – 2012-04-02 05:49:15

0

將內部查詢的輸出限制爲一個值,以成功運行您的查詢。

select l.student_code 
from school_table l, student_table n 
where l.school = n.schoolname 

check this

3

大家都知道的錯誤說什麼。 SET僅需要設置每列一個值。我們想要實現的是使用另一個表的列中的值更新給定列的所有行。

現在,這裏的解決方案:

BEGIN 
For i in (select col_X, col_Y from table1) 
LOOP 
Update table2 set col1 = i.col_X where col2 = i.col_Y; 
END LOOP; 
END; 

這就是你究竟是如何上的SQLDeveloper工作運行它。他們說這很慢,但這是在這種情況下爲我工作的唯一解決方案。

-1

如果您不關心列表中的值或確保它們相同,請嘗試將rownum = 1添加到子查詢條件中。

相關問題