从条件
填充另一个表的列中的列时UPDATE EVENT E
SET TIMESTART = (SELECT TIMESTART FROM EVENTSTEPS WHERE STEPNUMBER=1)
WHERE EVENTREF = (SELECT EVENTREF FROM EVENTSTEPS);
我在10g中收到此错误:
ORA-01427:单行子查询返回多行
如果我想从其他表格列填充表格列,我不知道该做什么是正确的。有人可以帮我解决这个问题吗?感谢。
答案 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
而不是=