sql >> Database >  >> RDS >> Oracle

Oracle Update-instructie met een Inner Join

In Oracle kunt u geen from . gebruiken clausule in een update verklaring op die manier. Elk van de volgende zaken zou moeten werken.

UPDATE d
SET    d.user_id   =
          (SELECT c.user_id
           FROM   c
           WHERE  d.mgr_cd = c.mgr_cd)
WHERE  d.user_id IS NULL;

UPDATE (SELECT d.user_id AS d_user_id, c.user_id AS c_user_id
        FROM   d INNER JOIN c ON d.mgr_cd = c.mgr_cd
        WHERE  d.user_id IS NULL)
SET    d_user_id   = c_user_id;

UPDATE (SELECT d.user_id AS d_user_id, c.user_id AS c_user_id
        FROM   d INNER JOIN c ON d.mgr_cd = c.mgr_cd)
SET    d_user_id   = c_user_id
WHERE  d_user_id IS NULL;

Mijn voorkeur gaat echter uit naar het gebruik van MERGE in dit scenario:

MERGE INTO d
USING      c
ON         (d.mgr_cd = c.mgr_cd)
WHEN MATCHED THEN
    UPDATE SET d.user_id = c.user_id
        WHERE      d.user_id IS NULL;



  1. Converteer 'time' naar 'datetime2' in SQL Server (T-SQL-voorbeelden)

  2. Match Regex in MySQL voor herhaald woord met voorwaarde sluit de haakjes uit

  3. Alle kinderen (en hun kinderen) van een bepaald bovenliggend knooppunt in een MySQL/MariaDB-relationele tabel krijgen

  4. Hoe DATE() werkt in MariaDB