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

【MySQL】同じ値を持つ交互の行(偶数行)の文字列を一括更新するクエリ

この記事では、MySQLで「同じ値を持つ行を1行おき(交互の行)に別の値へ更新する」方法を解説します。具体的には、Idカラムの値が偶数である行だけを条件として抽出し、UPDATE文とREPLACE()関数を組み合わせて文字列を置き換えます。

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

まず、テーブルを作成しましょう。

mysql> create table DemoTable
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Subject varchar(100)
-> );
Query OK, 0 rows affected (0.76 sec)

2. レコードの挿入

INSERTコマンドを使ってテーブルにレコードを挿入します。ここでは「MongoDB」という値を複数回登録している点に注目してください。

mysql> insert into DemoTable(Subject) values('C');
Query OK, 1 row affected (0.13 sec)

mysql> insert into DemoTable(Subject) values('MongoDB');
Query OK, 1 row affected (0.21 sec)

mysql> insert into DemoTable(Subject) values('Java');
Query OK, 1 row affected (0.18 sec)

mysql> insert into DemoTable(Subject) values('MongoDB');
Query OK, 1 row affected (0.12 sec)

mysql> insert into DemoTable(Subject) values('Python');
Query OK, 1 row affected (0.19 sec)

mysql> insert into DemoTable(Subject) values('MongoDB');
Query OK, 1 row affected (0.16 sec)

3. レコードの確認

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

mysql> select *from DemoTable;

出力結果

+----+---------+
| Id | Subject |
+----+---------+
| 1 | C |
| 2 | MongoDB |
| 3 | Java |
| 4 | MongoDB |
| 5 | Python |
| 6 | MongoDB |
+----+---------+
6 rows in set (0.00 sec)

4. 交互の行(偶数行)を更新するクエリ

以下が、1行おき(ここではIdが偶数の行)の文字列を更新するクエリです。WHERE Id%2=0という条件により、Idが偶数の行だけが更新対象になります。

mysql> update DemoTable set Subject=replace(Subject,'MongoDB','MySQL') where Id%2=0;
Query OK, 3 rows affected (0.17 sec)
Rows matched: 3 Changed: 3 Warnings: 0

このクエリでは、REPLACE(Subject, 'MongoDB', 'MySQL')によって、対象行の「MongoDB」をすべて「MySQL」へ置き換えています。

5. 更新結果の確認

再度テーブルの全レコードを確認してみましょう。

mysql> select *from DemoTable;

出力結果

+----+---------+
| Id | Subject |
+----+---------+
| 1 | C |
| 2 | MySQL |
| 3 | Java |
| 4 | MySQL |
| 5 | Python |
| 6 | MySQL |
+----+---------+
6 rows in set (0.00 sec)

実行結果のとおり、Idが偶数(2・4・6)の行にある「MongoDB」だけが「MySQL」に更新され、奇数行は元の値のまま維持されました。このように%(モジュロ演算子)を活用すれば、一定間隔で並ぶ行だけを簡単にまとめて更新できます。

  1. MySQLで特定の下3桁の値を除外するクエリの書き方

    テーブルから特定の下3桁を持つ値を除外してデータを取得したい場合は、NOT IN 演算子と RIGHT() 関数を組み合わせることで実現できます。ここでは、実際にサンプルテーブルを作成しながら手順を解説します。1. サンプルテーブルを作成するまず、CREATE TABLE文でテーブルを作成します。mysql> create table DemoTable(Value int); Query OK, 0 rows affected (0.71 sec)2. テーブルにレコードを挿入するINSERTコマンドを使って、いくつかのレコードを登録します。mysql> insert into

  2. MySQLクエリで同じ行内の文字列に値(部分文字列)が含まれているか確認する方法

    MySQLでは、同じ行内の異なるカラム同士で文字列の一致を確認したいケースがあります。例えば、「名前(FirstName)」が「フルネーム(FullName)」に含まれているかどうかを判定したい場合などです。このような場合は、LIKE演算子とCONCAT()関数を組み合わせることで実現できます。この記事では、実際にテーブルを作成し、データの挿入からクエリの実行まで順を追って解説します。1. サンプルテーブルの作成まず、検証用のテーブルを作成します。mysql> create table DemoTable ( FirstName varchar(100), FullNam