2009-03-02 8 views
40

Je sais comment faire cela, mais je pense que je vais trop compliquer avec des sélections doubles et ainsi de suite.MySQL: Un moyen simple de basculer une valeur d'un champ int

Comment pouvez-vous faire (par exemple dans le pseudo-sql)

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

Il doit être une valeur int due à une autre fonctionnalité, mais comment faites-vous d'une manière simple?

Répondre

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

Dans ce cas, vous pouvez utiliser une opération de type XOR:

UPDATE some_table SET an_int_value = an_int_value XOR 1 

Cela suppose que an_int_value sera toujours 1 ou 0 si.

2

Une autre option:

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

Logique mathématique très simple, à la fois merveilleuse et gracieuse. Tellement génial, chapeau à vous! – optimum

+3

La différence entre ceci et l'utilisation de 'IF' est la façon dont il se comporte avec' NULL'. En utilisant 'IF', les valeurs nulles sont mises à' 1', en utilisant ceci, elles restent 'NULL'. Vraiment dépend de ce que vous voulez. – vartec

5

je peux voir les réponses de toutes les personnes expérimentées et moi aussi être mis à jour avec leurs réponses.

Qu'en est-ce que je fais ... de cette façon ...

UPDATE tablename SET fieldname = not fieldname 

tout organisme peut faire des suggestions si s'il vous plaît ce ne sera pas une solution réalisable. en ce qui concerne la vitesse d'exécution ou tout autre ... quoi dire ... fait ... concept ....

+0

Cela fonctionne dans MySQL, mais seulement par coïncidence et leur implémentation non standard des booléens comme l'entier 0/1. Cela ne fonctionnera probablement pas sur la plupart des autres implémentations SQL standard (bien que je ne l'ai pas testé). –

0

Pour ENUM (0,1) champs que vous pouvez utiliser ...

MISE À JOUR Set de table int_value = BINARY (int_value = 1)

0

Pour ENUM (0,1) MISE À JOUR some_table SET an_int_value = IF (an_int_value = '1', '0', '1');

+0

Pourriez-vous élaborer davantage votre réponse en ajoutant un peu plus de détails sur la solution que vous fournissez? – abarisone

Questions connexes