2017-07-02 47 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) 
;