2009-09-09 16 views
10

Quando si aggiorna una riga, voglio avere un controllo integrato per fare un controllo dei limiti. La maggior parte delle lingue ha una funzione MAX() per restituire il massimo degli argomenti passati, ma MySQL sembra utilizzare MAX() per qualcos'altro. Per esempio:Funzione MySQL MAX() per confrontare valori numerici in un aggiornamento?

UPDATE person SET dollars = MAX(0, dollars-20) WHERE id=1 

voglio sottrarre 20 dollari da persona id 1, ma io non voglio dollari per mai essere rappresentati da un valore negativo, quindi voglio un built-in confronto con 0. Questo lavoro? oppure c'è un'altro modo? Grazie!

risposta

35

MySQL supporta una funzione denominata GREATEST(). Restituisce il valore più grande tra un elenco dei suoi argomenti.

UPDATE person SET dollars = GREATEST(0, dollars-20) WHERE id=1 

Questa non è una funzione standard ANSI SQL, quindi non contare su di esso che è disponibile in altre marche di database SQL. Se è necessaria una soluzione indipendente dal fornitore, utilizzare la sintassi CASE suggerita da altri. Ma se tutto ciò che devi usare è MySQL, questa funzione è più concisa.

+3

La funzione 'MIN()' è chiamata 'LEAST()' –