[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: SQL: incrementare valore



Informazione aggiuntiva: si lavora sempre su una sola riga, anche perché r_to è sempre >= r_fr, quindi dopo ogni aggiornamento max(r_co) di solito cambia. (dico di solito perché in casi molto particolari r_fr e r_to potrebbero essere uguali). se per caso dovessi aggiornare più di una riga la subselect dovrebbe comunque essere fatta ogni volta.
Il database è maria .

On Sat, 29 Apr 2017, Gian Uberto Lauri wrote:

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.




--
Leonardo Boselli
Dipartimento Ingegneria Civile e Ambientale UNIFI
tel +39 0552758808  +39 3488605348



Reply to: