我想在oracle中执行以下操作:
update tableA tA
set tA.value = (
select tB.value
from tableB tB
inner join tableC tC
on tB.value = tC.value
)
它给了我ORA-01427。我怎么需要更改查询来运行它?如果我添加"和rownum = 1"我可以运行查询,但我将在所有行中得到相同的结果。
答案 0 :(得分:0)
你应该在tableA和tableB / tableC之间建立一个关系,结果只能给你一行。 假设,tableA和tableB之间存在一个名为“id”的列的关系。
update tableA tA
set tA.value = (
select tB.value
from tableB tB
inner join tableC tC
on tB.value = tC.value
where tB.id = tA.id
)
答案 1 :(得分:0)
ORA-01427
UPDATE 语句的问题是子查询返回多行,但 set子句需要一行。使其工作的唯一方法是在子查询的结果集和要更新的表之间建立连接候选。基本上,您需要将其设为相关的子查询。
我更喜欢使用 MERGE 语句,因为它冗长且易于理解。
MERGE INTO tableA A
USING (SELECT tB.value value,
tB.join_candidate id
FROM tableB tB
INNER JOIN tableC tC
ON tB.VALUE = tC.VALUE
) b
ON(b.ID = A.ID)
WHEN MATCHED THEN
UPDATE SET a.value = b.value;
请记住,您无法在ON
子句中更新您要提及的列。