我的桌子上有很多行。我需要使用另一个(非常复杂的)查询来更新表中所有行中的特定列。
这是我的桌子:
col1 col2
A null
B null
C null
我有一个查询,用于分别更新每一行,它看起来像这样:
update table1 set col2='
... some query that uses other tables and the A value ...'
where col1='A'
我想更新一个查询中的所有行(否则,我将不得不为每一行运行查询并更改变量)。
我需要有col1
中的值可用于我运行的内部查询中。我该怎么办?
谢谢!
答案 0 :(得分:1)
不需要循环。您可以使用相关子查询:
UPDATE table1
SET col2 = (SELECT colX FROM tableA WHERE table1.some_col = tableA.some_col)
WHERE col1='A';
-- subquery has to return single value(1 row and 1 column)
当嵌套的子查询引用表中的列时,Oracle会执行相关的子查询,该表引用了子查询上一级的父语句。父语句可以是子查询嵌套在其中的SELECT,UPDATE或DELETE语句。从概念上讲,对关联的子查询对父语句处理的每一行都进行一次评估。
答案 1 :(得分:0)
您似乎想要一个相关的子查询:
update table1 t1
set col2 = (select . . .
from . . .
where . . .
? = t1.col1 -- your condition goes here
. . .
);