如何使用另一个表中的值填充表

时间:2017-07-02 03:32:09

标签: sql oracle

从条件

填充另一个表的列中的列时
UPDATE EVENT E 
SET TIMESTART = (SELECT TIMESTART FROM EVENTSTEPS WHERE STEPNUMBER=1) 
WHERE EVENTREF = (SELECT EVENTREF FROM EVENTSTEPS);

我在10g中收到此错误:

  

ORA-01427:单行子查询返回多行

如果我想从其他表格列填充表格列,我不知道该做什么是正确的。有人可以帮我解决这个问题吗?感谢。

3 个答案:

答案 0 :(得分: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 :(得分: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) 
;

答案 2 :(得分:0)

如果要从子查询中分配或更新任何值,那么它应该只返回一个值,这样它就可以得到更新。

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

在子查询返回多行并且您想要更新满足条件的所有行的情况下,然后放置in而不是=