Oracle 我想使用T3列和三个表关系来更新T1

Oracle 我想使用T3列和三个表关系来更新T1,oracle,Oracle,这会给出错误“ORA-01427:单行子查询返回多行”。错误消息 UPDATE TABLE1 T1 SET T1.CENTERNAME= (SELECT AC.CENTERNAME FROM TABLE2 T2 INNER JOIN TABLET3 AN ON T2.CENTERID = T3.LOCATIONID INNER JOIN TABLE1 T1 ON T3.LOG_ID = T1.LOGID W HERE TRUNC(T1.ROW_DATE)='25-MAR-2014'); 意

这会给出错误“ORA-01427:单行子查询返回多行”

错误消息

UPDATE TABLE1 T1 SET T1.CENTERNAME=
(SELECT AC.CENTERNAME 
FROM TABLE2 T2 INNER JOIN TABLET3 AN ON T2.CENTERID = T3.LOCATIONID 
INNER JOIN TABLE1 T1 ON T3.LOG_ID = T1.LOGID W
HERE TRUNC(T1.ROW_DATE)='25-MAR-2014');
意味着,呃,子查询返回的不仅仅是行。也就是说,你陈述的这一部分

ORA-01427: single-row subquery returns more than one row
返回的行数大于。发生此错误的原因是更新的SET部分依赖于相等运算符-
SET T1.CENTERNAME=
,因此只能取一个值

如果没有关于数据结构的更多细节,很难确定,但我怀疑您真正想要的是这样的东西

(SELECT AC.CENTERNAME 
FROM TABLE2 T2 INNER JOIN TABLET3 AN ON T2.CENTERID = T3.LOCATIONID 
INNER JOIN TABLE1 T1 ON T3.LOG_ID = T1.LOGID 
WHERE TRUNC(T1.ROW_DATE)='25-MAR-2014') 

(我已经整理了您的编校以使别名一致。)

错误消息非常清楚,您的内部select语句返回多行。你需要解决这个问题。我们不知道您的数据结构是什么样的。您真的想加入子任务中新版本的
table1
,还是应该与外部版本关联?
UPDATE TABLE1 T1 
SET T1.CENTERNAME= (SELECT T2.CENTERNAME 
                    FROM TABLE2 T2 
                            INNER JOIN TABLE3 T3
                        ON T2.CENTERID = T3.LOCATIONID 
                    WHERE T3.LOG_ID = T1.LOGID )
WHERE TRUNC(T1.ROW_DATE)='25-MAR-2014'
/