Oracle SQL错误 - 单行子查询返回多行

时间:2016-03-11 10:16:28

标签: sql oracle sql-update

    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:单行子查询返回多行

如何更新多行而不只是一行?

我在此错误中看到的任何主题都无法解决问题。

已编辑 - 是否有办法使用循环执行此操作?

1 个答案:

答案 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的主键。)

如果相关子查询仍然返回多行,那么您需要确定所需的多个返回行中的哪一行并添加一些内容,以便只返回那一行 - 例如具有最高创作日期或其他的那个。