Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Aktualisieren der Zeile mit Unterabfrage, die mehrere Zeilen zurückgibt

Auf Oracle können Sie Abfragen, die nur eine Zeile zurückgeben (skalare Unterabfragen), in Klammern setzen und sie so verwenden, wie Sie Variablen/Spalten verwenden würden:

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

Wenn die Unterabfrage mehr als eine Zeile zurückgibt, möchten Sie wahrscheinlich SUM() in der Unterabfrage verwenden. Bearbeiten:Wenn Sie keine Tabellen in der Unterabfrage verknüpfen, sollten Sie stattdessen wahrscheinlich zwei Unterabfragen verwenden.

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)