sql >> Database teknologi >  >> RDS >> Oracle

Sådan opdaterer du med indre joinforbindelse i Oracle

Denne syntaks virker ikke i Oracle SQL.

I Oracle kan du opdatere en join, hvis tabellerne er "nøglebevarede", 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

Forudsat at b_pk er den primære nøgle til b , her kan joinforbindelsen opdateres, fordi der for hver række af A er højst en række fra B, derfor er opdateringen deterministisk.

I dit tilfælde, da den opdaterede værdi ikke afhænger af en anden tabel, kan du bruge en simpel opdatering med en EXIST-tilstand, sådan noget som denne:

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. Hvorfor er der huller i min IDENTITY-kolonneværdier?

  2. Anonymiser dine planoplysninger indbygget i Plan Explorer

  3. Oracle-sekvens, der starter med 2 i stedet for 1

  4. Sådan implementeres MariaDB Cluster 10.5 for høj tilgængelighed