在Oracle中使用Join查询进行更新

查询出了什么问题? (它无限期地执行)

UPDATE table1 t1 SET (t1.col,t1.Output) = ( SELECT t2.col, t3.Output + t2.col FROM tabl2 t3 LEFT JOIN table1 t2 ON t3.Join_Key = t2.Join_Key WHERE t2.col is not NULL); 

请帮帮我。

您的查询与genericstable1,table2和join_key引用没有太大关系。

如果这不是你正在寻找的,那么有一些样本数据可以帮助你更好地了解你正在寻找的结果。

 update table1 t1 set t1.col = (select t2.col from table2 t2 where t1.join_key = t2.join_key(+) and t1.col is not null), t1.output = (select t2.output + t1.col from table2 t2 where t1.join_key = t2.join_key(+) and t1.col is not null); 

除非您的SELECT子查询返回单个行,否则您的UPDATE语句会失败,并显示错误

 ORA-01427: single-row subquery returns more than one row 

通常,如果您有相关的更新,则需要一些将外部表T1中的行与内部子查询中的行关联的条件,以确保子查询返回单个行。 这通常会看起来像

 UPDATE table1 t1 SET (t1.col,t1.Output) = ( SELECT t2.col, t3.Output + t2.col FROM tabl2 t3 LEFT JOIN table1 t2 ON t3.Join_Key = t2.Join_Key WHERE t2.col is not NULL AND t1.some_key = t2.some_key); 

最后,这个UPDATE语句正在更新T1每一行。 这是你的意图吗? 或者,你只想更新哪些行,例如,你在子查询中find匹配项?