2017-07-02 53 views
0

當填充另一個表中的列與條件的欄如何從另一個表填寫表一中值

UPDATE EVENT E 
SET TIMESTART = (SELECT TIMESTART FROM EVENTSTEPS WHERE STEPNUMBER=1) 
WHERE EVENTREF = (SELECT EVENTREF FROM EVENTSTEPS); 

我得到這個錯誤在10g:

ORA-01427:單-row子查詢返回多個行

我不知道如果我想從其他表列中填充表的列,那麼該做什麼是正確的。有人可以幫我解決這個問題嗎?謝謝。

回答

0

如果你正在分配或更新來自子查詢的任何值,那麼它應該只返回一個值,以便它可以得到更新。

UPDATE EVENT E SET TIMESTART = (SELECT max(TIMESTART) FROM EVENTSTEPS WHERE STEPNUMBER=1) 
WHERE EVENTREF = (SELECT max(EVENTREF) FROM EVENTSTEPS); 

而且在條件子查詢返回多行,你要更新其滿足條件的所有行,然後把in代替=

1

使用的MERGE語句:

MERGE INTO EVENT e 
    USING (SELECT EVENTREF, TIMESTART 
      FROM EVENTSTEPS 
      WHERE STEPNUMBER = 1) s 
    ON (s.EVENTREF = e.EVENTREF) 
WHEN MATCHED THEN 
    UPDATE 
    SET e.TIMESTART = s.TIMESTART; 

祝你好運。

1

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

update語句需要我們一個值分配給SET子句中的列。您的子查詢返回一行 EVENTSTEPS記錄STEPNUMBER = 1的位置。這是因爲您不限制子查詢僅返回當前EVENT的行。

你需要的是相關子查詢:

UPDATE EVENT E 
SET e.TIMESTART = (SELECT es.TIMESTART 
        FROM EVENTSTEPS es 
        WHERE es.EVENTREF = e.EVENTREF 
        and es.STEPNUMBER=1) 
;