UPDATE simultaneo di due o più tabelle
Articolo scritto da Max Bossi
Mediante il comando UPDATE abbiamo la possibilità di agire su record già esistenti, modificandoli.
Poniamo ad esempio di avere, all'interno del nostro DB, una tabella numeri_di_telefono così strutturata:
- nome
- telefono
| nome | telefono |
| Mario Rossi | 123.456789 |
| Antonio Bianchi | 987.654321 |
| Claudio Verdi | 321.654987 |
Ora poniamo che il sig. Mario Rossi si sia trasferito e, pertanto, abbia cambiato numero di telefono. Per aggiornare la nostra agenda telefonica dovremo utilizzare una query del genere:
UPDATE numeri_di_telefono SET telefono = '213.698547' WHERE nome = 'Mario Rossi'Fin qui niente di nuovo.
Supponiamo ora di avere anche un'altra tabella chiamata indirizzi così strutturata:
- nome
- via
- citta
- prov
| nome | via | cita | prov |
| Mario Rossi | via roma 11 | Torino | TO |
| Antonio Bianchi | via garibaldi 2 | Gallarate | VA |
| Claudio Verdi | piazza cavour 4 | Como | CO |
Finita questa lunga premessa veniamo al quesito che da il titolo a questo articolo: come è possibile aggiornare le due tabelle simultaneamente, cioè utilizzando una sola query anzichè due?
Semplice, utilizzando una JOIN in fase di UPDATE!
Tornando all'esempio di prima potremmo utilizzare una query del genere:
UPDATE numeri_di_telefono INNER JOIN indirizzi ON numeri_di_telefono.nome = indirizzi.nome SET numeri_di_telefono.telefono = '213.698547', indirizzi.via = 'piazza delle repubblica 5', indirizzi.citta = 'Milano', indirizzi.prov = 'MI' WHERE numeri_di_telefono.nome = 'Mario Rossi'Dopo aver eseguito la query di UPDATE verifichiamo effettuando due distinte SELECT sulle due tabelle. Ecco i rispettivi risultati (evidenziati in giallo):
1) tabella numeri_di_telefono
SELECT * FROM numeri_di_telefono
| nome | telefono |
| Mario Rossi | 213.698547 |
| Antonio Bianchi | 987.654321 |
| Claudio Verdi | 321.654987 |
1) tabella indirizzi
SELECT * FROM indirizzi
| nome | via | cita | prov |
| Mario Rossi | piazza delle repubblica 5 | Milano | MI |
| Antonio Bianchi | via garibaldi 2 | Gallarate | VA |
| Claudio Verdi | piazza cavour 4 | Como | CO |
Il vantaggio pratico di una tecnica di aggiornamento di più tabelle, tra loro relazionate, mediante JOIN è quello di ridurre il carico di lavoro del server sulla base di un semplice principio: "una query è meglio di due".
');







