Home / Database & Server / Database & Server / UPDATE con SELECT in MySQL
Mattepuffo

UPDATE con SELECT in MySQL

UPDATE con SELECT in MySQL

A vole può capitare di dover fare UPDATE massicci su una tabella controllando però determinate condizioni su un'altra tabella collegata.

Ad esempio nel mio caso ho una tabella articoli; il prezzo degli articoli è su un'altra tabella collegata tramite il codice dell'articolo.

Io dovevo impostare il flag abilitato su tutti quegli articoli che avevano un prezzo maggiore di uno.

Quindi in linea teorica è questo: aggiorna la tabella articoli settando 1 sul campo abilitato in tutti gli articoli che nella tabella listini_righe hanno il prezzo maggiore di 1.

In MySQL è uscita una cosa così:

UPDATE articoli SET abilitato = 1
WHERE articolo_codice IN (SELECT articolo_codice FROM listini_righe WHERE listino_righe_prezzo > 1);

Come vedete nella clausola WHERE eseguiamo una ricerca degli articoli eseguendo un'altra SELECT usando IN.

La cosa è abbastanza semplice.

Ovviamente le tabelle devono essere collegate e nella seconda SELECT il campo di ricerca deve essere uno; quello collegato.

Non si può fare così ad esempio:

UPDATE articoli SET abilitato = 1
WHERE articolo_codice IN (SELECT * FROM listini_righe WHERE listino_righe_prezzo > 1);

MySQL da errore perchè non saprebbe dove cercare.