sql >> Databasteknik >  >> RDS >> Oracle

Hur man uppdaterar med inre join i Oracle

Denna syntax fungerar inte i Oracle SQL.

I Oracle kan du uppdatera en join om tabellerna är "nyckelbevarade", dvs:

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

Förutsatt att b_pk är den primära nyckeln för b , här är sammanfogningen uppdateringsbar eftersom det för varje rad i A finns högst en rad från B, därför är uppdateringen deterministisk.

I ditt fall eftersom det uppdaterade värdet inte beror på en annan tabell kan du använda en enkel uppdatering med ett EXIST-villkor, ungefär så här:

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)


  1. Hur man installerar SQL Server

  2. Hur avrundar man ett genomsnitt till 2 decimaler i PostgreSQL?

  3. Räkna referenser till en post i en tabell via främmande nycklar

  4. MySQL kontra PDO