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

【MySQL】2つの列の値が等しい場合に該当行を削除する方法

MySQLである列と別の列の値が一致している行だけを削除したいケースは意外と多くあります。例えば、スコアの検算結果などで「2つの値が同じならデータ不要」という場合です。このような処理には DELETE文 を使用します。

本記事では、実際にテーブルを作成し、2つの列の値が等しい行を削除する手順をサンプル付きで解説します。

1. サンプルテーブルの作成

まず、以下のようにテーブルを作成します。

mysql> create table DemoTable
(
    Name varchar(40),
    Score1 int,
    Score2 int
);
Query OK, 0 rows affected (2.71 sec)

2. テストデータの挿入

次に、INSERTコマンドを使っていくつかのレコードを挿入します。ここでは、Score1とScore2が同じ値のレコードも含めておきます。

mysql> insert into DemoTable values('John',56,76);
Query OK, 1 row affected (0.66 sec)
mysql> insert into DemoTable values('Chris',77,77);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('David',89,98);
Query OK, 1 row affected (0.13 sec)

3. 現在のデータを確認

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

mysql> select *from DemoTable;

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

+-------+--------+--------+
| Name  | Score1 | Score2 |
+-------+--------+--------+
| John  |     56 |     76 |
| Chris |     77 |     77 |
| David |     89 |     98 |
+-------+--------+--------+
3 rows in set (0.00 sec)

この時点では「Chris」の行だけ、Score1とScore2の値が同じ(77 = 77)になっています。

4. 2つの列が等しい行を削除するクエリ

2つの列が等しい場合に行を削除するには、DELETE文のWHERE句で直接列同士を比較します。クエリは以下のようになります。

mysql> delete from DemoTable
    where Score1=Score2;
Query OK, 1 row affected (0.29 sec)

WHERE句に「Score1=Score2」と記述することで、両列の値が一致している行だけが削除対象になります。実行結果を見ると、1件の行が削除されたことがわかります。

5. 削除後のテーブルを確認

もう一度SELECT文を実行して、テーブルの状態を確認しましょう。

mysql> select *from DemoTable;

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

+-------+--------+--------+
| Name  | Score1 | Score2 |
+-------+--------+--------+
| John  |     56 |     76 |
| David |     89 |     98 |
+-------+--------+--------+
2 rows in set (0.00 sec)

Score1とScore2が等しかった「Chris」の行だけが削除され、「John」と「David」の行はそのまま残っていることが確認できます。

まとめ

  • 列同士を比較して行を削除するには、DELETE文のWHERE句で「列名1=列名2」のように指定します。
  • WHERE句による条件指定を忘れると全行が削除されるため、実行前には必ずSELECT文で対象行を確認することをおすすめします。
  1. MySQLで2つの列の組み合わせごとの出現回数を集計する方法

    MySQLでは、GROUP BY句とGREATEST()・LEAST()関数を組み合わせることで、2つの列にまたがる値の組み合わせごとの出現回数を簡単に集計できます。この記事では、具体的なサンプルを使って手順を解説します。1. サンプルテーブルを作成するまず、2つの名前列を持つテーブルを作成します。mysql> create table DemoTable -> ( -> Name1 varchar(20), -> Name2 varchar(20) -> );Query OK, 0 rows affected (0.61 sec)2. テ

  2. 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)