查询有什么问题? (它无限期地执行)
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);
请帮助我。
答案 0 :(得分:4)
除非您的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
中的每一行。这是你想要的吗?或者您只想更新行,例如,您在子查询中找到匹配项?
答案 1 :(得分:2)
对于通用table1,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);