Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Atualizar com consulta de junção no Oracle


A menos que seu SELECT subconsulta retorna uma única linha, seu UPDATE instrução deve falhar com o erro
ORA-01427: single-row subquery returns more than one row

Geralmente, quando você tem uma atualização correlacionada, você precisa de alguma condição que relacione as linhas na tabela externa T1 para linhas na subconsulta interna para garantir que a subconsulta retorne uma única linha. Isso geralmente seria algo como
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);

Finalmente, este UPDATE instrução está atualizando cada linha em T1 . É isso que você pretende? Ou você deseja atualizar apenas as linhas onde, por exemplo, você encontra uma correspondência em sua subconsulta?