Oracle
 sql >> Base de données >  >> RDS >> Oracle

Mettre à jour avec la requête Join dans Oracle

Sauf si votre SELECT la sous-requête renvoie une seule ligne, votre UPDATE l'instruction doit échouer avec l'erreur

ORA-01427: single-row subquery returns more than one row

Généralement, si vous avez une mise à jour corrélée, vous avez besoin d'une condition qui relie les lignes de la table externe T1 aux lignes de la sous-requête interne afin de garantir que la sous-requête renvoie une seule ligne. Cela ressemblerait généralement à quelque chose comme

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);

Enfin, cette UPDATE l'instruction met à jour chaque ligne dans T1 . C'est ce que vous avez l'intention ? Ou souhaitez-vous uniquement mettre à jour les lignes où, par exemple, vous trouvez une correspondance dans votre sous-requête ?