In questo breve articolo vedremo com’è possibile effettuare delle query di cancellazione (DELETE) sfruttando le potenzialità delle JOIN, cioè creando relazioni tra tabelle con MySQL. In realtà abbiamo già visto come utilizzare le JOIN in fase di selezione dei dati (SELECT) ed in fase di aggiornamento (UPDATE) in questa sede non faremo altro che estendere quanto già appreso.
Per meglio apprendere le potenzialità di questa tecnica ritengo opportuno, come nostra abitudine, ipotizzare un caso concreto di utilizzo.
Poniamo di dover operare su un database di un ipotetico magazzino merci composto dalle seguenti tabelle (di cui descriviamo le rispettive strutture):
- scaffali
- id (int)
- descrizione (varchar)
- ripiani
- id (int)
- scaffale_id (int)
- descrizione (varchar)
- prodotti
- id (int)
- ripiano_id (int)
- nome (varchar)
- prezzo (float)
Ora si ipotizzi di avere la necessità di eliminare dei prodotti. Affrontiamo di seguito tre diverse eventualità.
1) Si ipotizzi di voler eliminare un singolo prodotto di cui si conosce l’ID. In tal caso sarà sufficiente eseguire una banale query:
DELETE * FROM prodotti WHERE id = 1;
2) Analoga query sarà utilizzata qualora si voglia eliminare tutti i prodotti stipati in un dato ripiano:
DELETE * FROM prodotti WHERE ripiano_id = 1;
3) Ma se si volesse eliminare tutti i prodotti presenti in un determinato scaffale? Una semplice query come quelle viste in precedenza non sarebbe possibile in quanto nella tabella "prodotti" non è presente alcun campo che faccia riferimento allo scaffale!
In realtà il problema non è insormontabile! con un po’ di destrezza nella gestione delle query, infatti, l’ostacolo sarà facilmente aggirato! Come? con una JOIN! Ecco l’esempio:
DELETE prodotti.*
FROM prodotti INNER JOIN ripiani
ON prodotti.ripiano_id = ripiani.id
WHERE ripiani.scaffale_id = 1;
Così facendo abbiamo creato una relazione tra le due tabelle "prodotti" e "ripiani" (sulla base del campo di JOIN "ripiano_id" della prima tabella che corrisponde all’identificativo della seconda) al fine di sfruttare il campo "scaffale_id" di quest’ultima.
A prima vista, forse, potrebbe sembrarvi un poco complicato… in realtà è piuttosto semplice. Si tratta di creare una relazione logica tra due tabelle al fine di utilizzare informazioni della seconda per operare sulla prima.
Qualora, oltre ai prodotti, avessimo voluto eliminare anche i ripiani corrispondenti a quel dato scaffale avremmo pututo utilizzare una query leggermente diversa:
DELETE prodotti.*, ripiani.*
FROM prodotti INNER JOIN ripiani
ON prodotti.ripiano_id = ripiani.id
WHERE ripiani.scaffale_id = 1;
In sostanza si tratta della query vista poco sopra con l’unica differenza che la cancellazione riguarderà non solo i campi della tabella "prodotti":
prodotti.*
ma anche quelli della tabella "ripiani":
ripiani.*
Per dubbi o richieste vi invito a postare sul nostro forum.