UPDATE Table_A
SET Column_A =
(SELECT Table_C.Column_C
FROM
Table_A
INNER JOIN
Table_B
ON
Table_A.Column_A1 = Table_B.Column_B
INNER JOIN
Table_C
ON
Table_B.Column_B1 = Table_C.Column_C1
WHERE
Table_C.Column_C2 <> 'T' and
Table_C.Column_C3 = 'T' and
Table_B.Column_B2 = 'T' and Table_B.Column_B3 = 'xyz');
我在括号中有一个子查询,返回10个值,我想用Table_A更新。 但是update语句只需要从子查询中返回一个值:
ORA-01427:单行子查询返回多行
如何更新多行而不只是一行?
我在此错误中看到的任何主题都无法解决问题。
已编辑 - 是否有办法使用循环执行此操作?
答案 0 :(得分:1)
您需要correlate子查询到主查询中的行:
UPDATE Table_A a
SET Column_A =
(SELECT Table_C.Column_C
FROM
Table_A
INNER JOIN
Table_B
ON
Table_A.Column_A1 = Table_B.Column_B
INNER JOIN
Table_C
ON
Table_B.Column_B1 = Table_C.Column_C1
WHERE
Table_C.Column_C2 <> 'T' and
Table_C.Column_C3 = 'T' and
Table_B.Column_B2 = 'T' and Table_B.Column_B3 = 'xyz'
AND a.PKCOLS=Table_A.PKCOLS);
(&#34; PKCOLS&#34;无论哪一列都是Table_A的主键。)
如果相关子查询仍然返回多行,那么您需要确定所需的多个返回行中的哪一行并添加一些内容,以便只返回那一行 - 例如具有最高创作日期或其他的那个。