在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匹配项?