Re: SQL: incrementare valore
On 29/04/2017 10:17, Federico Di Gregorio wrote:
Puoi fare:
UPDATE mee SET r_co = (SELECT max(r_co) FROM mee) + r_to - r_fr WHERE
r_id = ...
Questa soluzione è sicuramente corretta solo se l'update va fatta su una
singola riga.
Se invece si devono aggiornare in blocco N righe (i.e. 'where id in
...), allora AFAIK il risultato
dipende da come è stato implementato l'ottimizzatore di query: se decide
di calcolare la max
una volta per tutte all'inizio si avrà un risultato, altrimenti se ne
avrà un altro e tempi di
esecuzione più lunghi.
[E può anche esserci uno standard che sancisce uno o l'altro
comportamento, bisogna
comunque vedere se il DBMS lo rispetta.]
In ogni caso, in dipendenza dalle esigenze della logica di business, si
possono avere
due situazioni a seconda o meno che serva che venga ricalcolato il max
per ogni riga, e
comunque affidarsi alla buona grazia dell'implementazione
dell'ottimizzatore non è una
soluzione accettabile oggi. Lavorare come Mel andava bene negli anni
'50/60 del secolo
scorso.
La stored procedure rimane una soluzione affidabile ed elegante.
--
Gian, stavolta non su uno smartphone.
Reply to: