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;
2 commenti
Buongiorno,
mi chiamo Lorenzo come Te…
Ho provato ad usare il comando UPDATE che suggerisci in ACCESS ma non va…
C’è un refuso in ciò che hai scritto oppure con ACCESS non va?
Grazie!
Ciao Caron Omonimo,
Grazie per il tuo commento!
Per “refuso” cosa intendi? Considera che Access non è propriamente ciò che definirei un database gestito con SQL per differenti limitazioni che ha rispetto ad altri DBMS. Che errore ti dà?
Un saluto,
Lorenzo