2009-03-02 8 views
40

Sé cómo hacer esto, pero creo que lo sobrecomplicaré con selecciones dobles, y así sucesivamente.MySQL: Manera simple de alternar un valor de un campo int

¿Cómo se puede hacer esto (ejemplo en la pseudo-SQL)

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

Debe ser un valor entero debido a alguna otra funcionalidad, pero ¿cómo hacerlo de una manera sencilla?

Respuesta

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

En este caso, se puede utilizar una operación XOR Tipo:

UPDATE some_table SET an_int_value = an_int_value XOR 1 

Esto es suponiendo que an_int_value siempre será 1 o 0 sin embargo.

2

Otra opción:

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

Lógica matemática muy simple, que es tanto maravillosa como elegante al mismo tiempo. ¡Tan impresionante, felicitaciones para ti! – optimum

+3

La diferencia entre esto y el uso de 'IF' es la forma en que se comporta con' NULL'. El uso de los valores nulos 'IF' se establece en' 1', usando esto permanecen 'NULL'. Realmente depende de lo que quieras. – vartec

5

puedo ver las respuestas de todas las personas con experiencia y yo también obtuve actualizado con sus respuestas.

qué pasa con esto ... lo hago de esta manera ...

UPDATE tablename SET fieldname = not fieldname 

cualquier organismo puede dar sugerencias por favor, si esto no va a ser una solución viable. con respecto a la velocidad de ejecución o cualquier otra ... qué decir ... hecho ... concepto ....

+0

Esto funciona en MySQL, pero solo por coincidencia y su implementación no estándar de booleanos como el entero 0/1. Esto probablemente no funcionará en la mayoría de las implementaciones de SQL estándar (aunque no lo he probado). –

0

Para ENUM (0,1) campos que puede utilizar ...

actualización de la tabla SET int_value = binario (int_value = 1)

0

Para ENUM (0,1) ACTUALIZACIÓN SET some_table an_int_value = IF (an_int_value = '1', '0', '1');

+0

¿Podría por favor elaborar más su respuesta agregando un poco más de descripción acerca de la solución que proporciona? – abarisone

Cuestiones relacionadas