2009-03-02 11 views
40

So come farlo, ma penso che lo complicherò con doppie selezioni e così via.MySQL: un modo semplice per commutare un valore di un campo int

Come si può fare questo (ad esempio in pseudo-SQL)

UPDATE some_table SET an_int_value = (an_int_value==1 ? 0 : 1); 

Deve essere un valore int a causa di qualche altra funzionalità, ma come si fa a farlo in modo semplice?

risposta

15
UPDATE some_table SET an_int_value = IF(an_int_value=1, 0, 1) 
9

In questo caso, è possibile utilizzare un'operazione di tipo XOR:

UPDATE some_table SET an_int_value = an_int_value XOR 1 

Ciò presuppone che an_int_value sarà sempre essere 1 o 0 se.

2

Un'altra opzione:

UPDATE some_table SET an_int_value = ABS(an_int_value - 1); 
97
UPDATE table SET field = 1 - field 
+1

Logica matematica molto semplice, che è allo stesso tempo meravigliosa e graziosa. Così fantastico, cappello a te! – optimum

+3

La differenza tra questo e l'uso di 'SE' è il modo in cui si comporta con' NULL'. Usando i valori nulli 'IF' sono impostati su' 1', usando questo essi rimangono 'NULL'. Dipende davvero da cosa vuoi. – vartec

5

posso vedere le risposte di tutte le persone con esperienza e troppo ho ottenuto aggiornato con le loro risposte.

che dire di questo ... faccio in questo modo ...

UPDATE tablename SET fieldname = not fieldname 

qualsiasi organismo può dare suggerimenti per favore se questo non sarà una soluzione fattibile. rispetto alla velocità di esecuzione o qualsiasi altro ... cosa dire ... fatto ... concetto ....

+0

Questo funziona in MySQL, ma solo per coincidenza e la loro implementazione non standard di booleani come numero intero 0/1. Questo probabilmente non funzionerà sulla maggior parte delle altre implementazioni SQL standard (anche se non l'ho ancora testato). –

0

Per ENUM (0,1) Campi è possibile utilizzare ...

UPDATE tabella SET int_value = BINARY (int_value = 1)

0

Per ENUM (0,1) UPDATE SET some_table an_int_value = IF (an_int_value = '1', '0', '1');

+0

Potresti per favore elaborare più la tua risposta aggiungendo un po 'più di descrizione della soluzione che fornisci? – abarisone

Problemi correlati