MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで1つのクエリだけでブーリアンフィールド(真偽値)を反転させる方法

はい、MySQLのIF()関数を使えば、ブーリアンフィールド(真偽値カラム)の値を1つのクエリで反転させることができます。

基本構文

ブーリアンフィールドを反転させるための基本的な構文は以下の通りです。

UPDATE テーブル名 SET カラム名 = IF(カラム名, 0, 1);

この構文では、カラムの値が真(1)であれば0に、偽(0)であれば1に切り替わります。それでは、実際にテーブルを作成して動作を確認してみましょう。

サンプルテーブルの作成

まず、以下のクエリでテーブルを作成します。

mysql> create table ReverseBooleanField
    -> (
    -> Id int NOT NULL AUTO_INCREMENT,
    -> isValid BOOLEAN,
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (0.56 sec)

テストデータの挿入

次に、INSERTコマンドを使っていくつかのレコードを挿入します。

mysql> insert into ReverseBooleanField(isValid) values(true);
Query OK, 1 row affected (0.18 sec)

mysql> insert into ReverseBooleanField(isValid) values(false);
Query OK, 1 row affected (0.14 sec)

mysql> insert into ReverseBooleanField(isValid) values(true);
Query OK, 1 row affected (0.29 sec)

mysql> insert into ReverseBooleanField(isValid) values(true);
Query OK, 1 row affected (0.09 sec)

mysql> insert into ReverseBooleanField(isValid) values(false);
Query OK, 1 row affected (0.14 sec)

データの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from ReverseBooleanField;

実行結果は以下の通りです。

+----+---------+
| Id | isValid |
+----+---------+
|  1 |       1 |
|  2 |       0 |
|  3 |       1 |
|  4 |       1 |
|  5 |       0 |
+----+---------+
5 rows in set (0.00 sec)

BOOLEAN型の内部動作について

ここで重要なポイントとして、MySQLは内部的にBOOLEAN型をTINYINT(1)として扱います。そのため、trueは「1」、falseは「0」という数値で格納されます。この仕組みを理解しておくと、真偽値の反転処理がイメージしやすくなります。

1つのクエリでブーリアンフィールドを反転させる

それでは、UPDATE文とIF()関数を組み合わせて、すべての行の真偽値を一括で反転させてみましょう。

mysql> update ReverseBooleanField set isValid = if(isValid,0,1);
Query OK, 5 rows affected (0.21 sec)
Rows matched - 5 Changed - 5 Warnings - 0

反転結果の確認

再度SELECT文を実行して、値が正しく反転されているか確認します。

mysql> select *from ReverseBooleanField;

実行結果は以下の通りです。

+----+---------+
| Id | isValid |
+----+---------+
|  1 |       0 |
|  2 |       1 |
|  3 |       0 |
|  4 |       0 |
|  5 |       1 |
+----+---------+
5 rows in set (0.00 sec)

補足:別の書き方

IF()関数以外にも、以下のような方法で同じ結果を得ることができます。

  • NOT演算子を使う方法: SET isValid = NOT isValid
  • CASE式を使う方法: SET isValid = CASE WHEN isValid THEN 0 ELSE 1 END
  • 排他的論理和(XOR)を使う方法: SET isValid = isValid XOR 1

どの方法でも結果は同じですが、IF()関数やNOT演算子を使う方法がシンプルで可読性が高いのでおすすめです。状況に応じて使い分けてください。

  1. MySQLの1つのUPDATE文で2つの列を同時に更新する方法

    はじめにMySQLでは、1つのUPDATE文の中でSET句を一度だけ使えば、複数の列を同時に更新できます。各列の指定はカンマ(,)で区切って記述します。この記事では、実際にテーブルを作成し、1つのクエリで2つの列(FirstNameとLastName)を更新する手順を解説します。サンプルテーブルの作成まず、以下のようにCREATE TABLE文でテーブルを作成します。mysql> create table DemoTable1909 ( Id int NOT NULL, FirstName varchar(20), LastName varchar(20)

  2. MySQLのDELETE文とIN句を組み合わせて1つのクエリで複数レコードを削除する方法

    MySQLでは、IN()句を活用することで、複数の条件値に一致するレコードを1つのDELETEクエリでまとめて削除できます。個別に削除クエリを実行する必要がなく、効率的なデータ操作が可能になります。ここでは、サンプルテーブルを作成し、実際にIN()句を使ったレコード削除の手順を解説します。1. サンプルテーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable1922 ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentName varchar(20)