Come eseguire un’UPDATE da una SELECT in SQL

di Lorenzo Neri
1.123 visualizzazioni

Come possiamo eseguire un’UPDATE tramite una SELECT in linguaggio SQL? È quello che scopriremo in questo articolo.

Ciao mi chiamo Lorenzo Neri e sono un informatico: realizzo contenuti per aiutare le persone a padroneggiare l’arte del nuovo millennio, ovvero l’informatica!

All’interno del linguaggio SQL abbiamo tante potenzialità.

Per esempio, possiamo eseguire una INSERT per aggiungere valori ad una tabella prendendole da un’altra tramite una SELECT.

Per esempio:

INSERT INTO Tabella(val1, val2, val3)
SELECT val1, val2, val3
FROM Altra_Tabella
WHERE sql="valore"

Ciò che ti stai chiedendo però è come eseguire una UPDATE tramite una SELECT: non è lontano dall’esempio precedente. Per intenderci tu vuoi fare qualcosa di questo tipo:

UPDATE Tabella SET val1, val2, val3
SELECT val1, val2, val3
FROM Altra_Tabella
WHERE sql="valore"
WHERE Tabella.id = Altra_Tabella.id

… Avrai notato pure te che questa procedura non dà il risultato sperato.

UPDATE da una SELECT, grazie ad INNER JOIN

La funzionalità offerta dalla INNER JOIN è ciò di cui hai bisogno.

Se non sapessi di che cosa sto parlando, ti invito a leggere il mio articolo dove spiego non solo che cos’è, ma anche le differenze con la OUTER JOIN. Trovi tutto questo con un click qui.

Torniamo a noi, una volta che hai chiarito come funziona la INNER JOIN: dobbiamo applicarla per eseguire l’UPDATE da una SELECT.

Dobbiamo fare questo:

UPDATE Tabella 
SET
   Tabella_A.val1 = Tabella_B.val1,
   Tabella_A.val2 = Tabella_B.val2,
   Tabella_A.val3 = Tabella_B.val3
FROM
   Tabella_Da_Cui_Copiare AS Tabella_A
   INNER JOIN Tabella_In_Cui_Copiare AS Tabella_B
       ON Tabella_A.id = Tabella_B.id
WHERE
   
   Tabella_A.val3 = "valore"

Ciò che abbiamo visto funziona bene in SQL, in generale, ma se stessi usando SQL Server, per intenderci la variante Microsoft, puoi usare MERGE.

MERGE per eseguire un’UPDATE da una SELECT su DB Microsoft

In questo caso, la sintassi per eseguire ciò che stiamo cercando, è anche più semplice:

MERGE INTO Tabella_A A
   USING Altra_Tabella B
      ON A.id = B.id
        AND B.valore = "valore"
WHEN MATCHED THEN
   UPDATE
      SET val1 = B.val1;
          val2 = B.val2;

Continua a scoprire di più con questi articoli!

Lascia un commento

Questo sito potrebbe fare uso di cookie e siccome l'UE mi obbliga a fartelo presente, eccoti il classico banner dove puoi decidere come gestirli. Accetta Leggi di più