back to top

Effettuare cancellazioni mediante JOIN di tabelle

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.

Altri contenuti interessanti

Pubblicità
Massimiliano Bossi
Massimiliano Bossi
Stregato dalla rete sin dai tempi delle BBS e dei modem a 2.400 baud, ho avuto la fortuna di poter trasformare la mia passione in un lavoro (nonostante una Laurea in Giurisprudenza). Adoro scrivere codice e mi occupo quotidianamente di comunicazione, design e nuovi media digitali. Orgogliosamente "nerd" sono il fondatore di MRW.it (per il quale ho scritto centinaia di articoli) e di una nota Web-Agency (dove seguo in prima persona progetti digitali per numerosi clienti sia in Italia che all'estero).

Leggi anche...

Come ottenere l’ID dell’ultimo record inserito in MySQL, PostgreSQL, SQL Server e Oracle?

Ottenere l'ID dell'ultimo record inserito in una tabella, dopo...

Database completo regioni, province e comuni italiani (in formato SQL)

Quando si sviluppa un sito web o un'applicazione in...

File CSV: cosa sono, come si aprono e come crearli

In questo articolo cercheremo di capire cos'è il formato...

Confrontare due tabelle e trovare i record senza corrispondenza

all'interno di un database relazionale può essere utile poter...

Eseguire comandi SQL online con SQL Fiddle

Sì. E' possibile testare codice SQL senza aver installato...

SQL: Calcolare la media dei valori di più campi

Attraverso una semplice query SQL è possibile calcolare dinamicamente...
Pubblicità