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

So aktualisieren Sie mit Inner Join in Oracle

Diese Syntax funktioniert nicht in Oracle SQL.

In Oracle können Sie einen Join aktualisieren, wenn die Tabellen "key-preserved" sind, dh:

UPDATE (SELECT a.val_a, b.val_b
          FROM table a
          JOIN table b ON a.b_pk = b.b_pk)
   SET val_a = val_b

Angenommen, b_pk ist der Primärschlüssel von b , hier ist der Join aktualisierbar, weil es für jede Zeile von A höchstens gibt eine Zeile von B, daher ist die Aktualisierung deterministisch.

Da der aktualisierte Wert in Ihrem Fall nicht von einer anderen Tabelle abhängt, könnten Sie ein einfaches Update mit einer EXIST-Bedingung verwenden, etwa so:

UPDATE mytable t
   SET t.VALUE = 'value'
 WHERE EXISTS 
       (SELECT NULL
          FROM tableb b
         INNER JOIN tablec c ON c.id = b.id
         INNER JOIN tabled d ON d.id = c.id
         WHERE t.id = b.id
           AND d.key = 1)