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

Update mit Join-Abfrage in Oracle

Es sei denn, Ihr SELECT Unterabfrage gibt eine einzelne Zeile zurück, Ihr UPDATE -Anweisung sollte mit dem Fehler

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

Im Allgemeinen benötigen Sie bei einem korrelierten Update eine Bedingung, die Zeilen in der äußeren Tabelle T1 verknüpft Zeilen in der inneren Unterabfrage, um sicherzustellen, dass die Unterabfrage eine einzelne Zeile zurückgibt. Das würde im Allgemeinen ungefähr so ​​​​aussehen

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

Zum Schluss noch dieses UPDATE -Anweisung aktualisiert jede Zeile in T1 . Ist es das, was Sie beabsichtigen? Oder möchten Sie nur die Zeilen aktualisieren, in denen Sie beispielsweise eine Übereinstimmung in Ihrer Unterabfrage finden?