2009-03-02 9 views
40

私はこれを行う方法を知っていますが、私はダブルセレクトなどでオーバーコンプリートすると思います。MySQL:intフィールドの値を切り替える簡単な方法

あなたは、この(擬似SQLの例)をどのように行うことができます

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

これは、いくつかの他の機能のためにint型の値である必要がありますが、簡単な方法でそれをどのように行うのですか?この場合

答えて

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

、あなたはXORタイプ演算を使用することができます。

UPDATE some_table SET an_int_value = an_int_value XOR 1 

これはan_int_valueは常にかかわらず、1または0になることを想定しています。

2

別のオプション:

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

非常に単純な数学ロジックです。これは同時に素晴らしいと優雅です。とても素晴らしい、帽子はあなたに! – optimum

+3

これと 'IF'との違いは、' NULL'で動作する方法です。 'IF'を使うと、NULL値は' 1'にセットされ、これを使って 'NULL'を維持します。本当にあなたが望むものに依存します。 – vartec

5

は、私はすべての経験豊富な人の答えを見ることができますし、私も自分の答えを更新しました。これは実現可能な解決策ではありません場合

... 私はこの方法でこのことについて何をすべきか...

UPDATE tablename SET fieldname = not fieldname 

すべてのボディは、提案をしてください与えることができます。実行速度や他の何かについて...言いたいこと...事実...コンセプト。 ENUMのためにENUMのために

+0

これはMySQLで動作しますが、偶然と非標準的なブール値の実装が整数0/1としてのみ発生します。これはおそらく他のほとんどの標準SQL実装(私はそれをテストしていません)では動作しません。 –

0

(0,1)は、使用可能なフィールド...

UPDATEテーブルSETのint_value = BINARY(int_value = 1)

0

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

+0

答えを詳しく説明してください。あなたが提供するソリューションについてもう少し詳しく説明してください。 – abarisone

関連する問題