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

Mise à jour d'une ligne avec une sous-requête renvoyant plusieurs lignes

Sur Oracle, vous pouvez mettre entre parenthèses les requêtes qui ne renvoient qu'une seule ligne (sous-requêtes scalaires) et les utiliser comme vous le feriez avec des variables/colonnes :

UPDATE Table1 t1
SET D = (SELECT t2.D + t3.D 
         FROM Table2 t2
             ,Table3 t3
         WHERE t1.P = t2.P 
           AND t1.A = t3.A);

Si la sous-requête renvoie plus d'une ligne, vous voudrez probablement utiliser SUM() dans la sous-requête.Modifier :si vous ne joignez pas les tables dans la sous-requête, vous devriez probablement utiliser deux sous-requêtes à la place.

UPDATE Table1 t1
SET D = (SELECT sum(t2.D) 
         FROM Table2 t2
         WHERE t1.P = t2.P)
        +
        (SELECT sum(t3.D)
         FROM Table3 t3
         WHEREt1.A = t3.A)